JAVA使用删除和插入语句调用存储过程

标签 java tsql stored-procedures resultset

我的 SP 确实包含 DELETE 和 INSERT INTO 语句。如果DELETE语句成功,但INSERT INTO不成功,JAVA只会查看第一条语句并得出整个SP执行成功的结论,这可能是错误的。

如果只有一个语句失败,如何执行多个语句并在 JAVA 中得到异常。 我已经在 SQL 中尝试过 TRY-CATCH,但得出的结论是,所有语句均已正确执行,因为第一个语句成功。

这是一个 MS SQL 2008 数据库

ALTER PROCEDURE [testing] 
    @bikes  varchar(8000), 
    @groupw varchar(4), 
    @name char(6)

AS
BEGIN


        DELETE CP_customer_kngr_corr_s WHERE knid in ('blue')

        DECLARE @pos INT
        DECLARE @len INT
        DECLARE @value varchar(8000)

        set @pos = 0
        set @len = 0
        set @bikes= @bikes  +','

        WHILE CHARINDEX(',', @bikes, @pos)>0 BEGIN
            set @len = CHARINDEX(',', @bikes, @pos+1) - @pos
            set @value = SUBSTRING(@bikes, @pos, @len)

            INSERT INTO [bikes]
               ([bikes])
            VALUES
                (@value)

            set @pos = CHARINDEX(',', @bikes, @pos+@len) +1
        END 
END

最佳答案

如果删除的行数为零,您可以获得删除的行计数并引发错误;对于插入语句,您可以使用 try/catch 并在 catch block 中引发错误。

//Perform delete
select @@ROWCOUNT

if @@ROWCOUNT = 0
  //RAISE ERROR

BEGIN TRY
 //perform insert here 
END TRY
BEGIN CATCH
DECLARE @ErrorMessage NVARCHAR(4000);
DECLARE @ErrorSeverity INT;
DECLARE @ErrorState INT;

SELECT @ErrorMessage = ERROR_MESSAGE(),
       @ErrorSeverity = ERROR_SEVERITY(),
       @ErrorState = ERROR_STATE();

-- Use RAISERROR inside the CATCH block to return 
-- error information about the original error that 
-- caused execution to jump to the CATCH block.
RAISERROR (@ErrorMessage, -- Message text.
           @ErrorSeverity, -- Severity.
           @ErrorState -- State.
           );

END CATCH;

还要检查 ERROR_STATE 返回的错误状态,然后将其作为值传递给 RAISERROR 的状态参数

干杯!!

关于JAVA使用删除和插入语句调用存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19010049/

相关文章:

Java 在字符串中查找单词

java - 如何使用随机选择获取列表中元素的文本?

sql - 必须有一种方法可以删除 SQL Server 中的数据而不会使日志过载

sql-server - 在 READ COMMITTED 隔离级别中何时/什么锁被持有/释放

mysql - 在MYSQL中的表中插入0到999999行

java - 为什么 .bat 文件会跳行并跳到末尾?

java - 在 128c 条码符号体系中对字符串进行编码

sql - 如何排除sql server insert语句中的行?

sql - 在自引用表 SQL Server 上查找最高祖 parent

python - 从 PostgreSQL 存储过程导入 Python 文件