executeUpdate () не выдает ошибку, выданную в Sql-Server - PullRequest
0 голосов
/ 12 апреля 2019

У меня есть хранимая процедура, которая запускает транзакцию, которая должна установить инструмент на машину. На каждом компьютере может быть установлено несколько инструментов, но каждый инструмент может быть установлен только на одном компьютере (ограничения при создании таблицы). Если эти ограничения нарушены, выбрасываемое исключение следует заменить на более конкретное исключение. Проблема в том, что когда я запускаю процедуру на SQL-сервере, все отлично работает, но вызов callableStatement.executeUpdate () не вызывает исключения в коде Java.

Я попытался использовать callableStatement.executeQuery () вместо этого, и он прекрасно работает, когда генерируется исключение, но если процедуры работают без проблем, я все еще получаю исключение «0; инструкция не возвращает набор результатов; состояние = ноль».

процедура 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 call:

 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-код его перехватит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...