executeUpdate()不会引发在Sql Server中引发的错误

时间:2019-04-12 17:05:15

标签: java sql-server jdbc

我有存储过程启动了应将工具安装到机器的事务。每台计算机可以安装多个工具,但是每个工具只能安装到一台计算机上(限制表创建)。如果打破了这些约束,则应将引发的异常更改为更具体的异常。问题是,当我在SQL Server中运行过程时,一切正常,但是调用callableStatement.executeUpdate()不会在Java代码中引发异常。

我尝试改为使用callableStatement.executeQuery(),并且在引发异常时效果很好,但是如果过程正常运行,我仍然会得到例题“ 0;该语句未返回结果集。; state = null”。

SQL服务器过程

    BEGIN TRY
        BEGIN TRANSACTION;
        INSERT INTO montaza (oznStroj, sifAlat) VALUES (@oznStroj, @sifAlat);

        UPDATE alat
        SET montiran = 'D'
        WHERE sifAlat = @sifAlat;

        UPDATE stroj
        SET brojMontiranih = brojMontiranih + 1
        WHERE oznStroj = @oznStroj;
        COMMIT TRANSACTION;
    END TRY

    BEGIN CATCH
        ROLLBACK TRANSACTION;

        IF ERROR_NUMBER() = @primary_key_error_number
        BEGIN
            THROW 50511, 'Alat je zauzet', 1;
        END
        ELSE IF ERROR_NUMBER() = @constraint_broken_code
        BEGIN
            IF ERROR_MESSAGE() LIKE '%chkKapacitet%'
                BEGIN
                    THROW 50512, 'Kapacitet strojaje popunjen', 1;
                END
            ELSE
            BEGIN
                THROW SELECT ERROR_NUMBER(), ERROR_MESSAGE(), ERROR_STATE();
            END
        END
        ELSE
        BEGIN
            THROW SELECT ERROR_NUMBER(), ERROR_MESSAGE(), ERROR_STATE();
        END
    END CATCH
GO

JDBC调用:

 try {
            Connection conn = SQLConnectionProvider.getConnection();

            CallableStatement callableStatement = conn.prepareCall(installToolTrans);
            callableStatement.setInt(1, toolCode);
            callableStatement.setString(2, machineTag);
            callableStatement.executeUpdate();

            callableStatement.close();
            conn.close();
        } catch (SQLException sqlException) {
            throw new DAOException(sqlException.getErrorCode(), sqlException.getMessage(), sqlException.getSQLState());
        }

预期: 当过程正确运行并提交更改时,Java代码不会引发任何异常,而当过程引发异常时,则Java代码会捕获该异常。

0 个答案:

没有答案