Elevar Java excepción de SQL de procedimiento almacenado de SQL Server?

Gábor Major:

Tengo un procedimiento almacenado de SQL Server similar a esto:

CREATE PROCEDURE proc1
(
    @param DECIMAL
)
AS
    BEGIN
        INSERT INTO table1 (@param);
        -- further commands
    END;
GO

Este procedimiento se llama desde Java. Introduje una restricción única en table1, en la misma columna que se inserta anteriormente. Se espera para obtener una excepción de SQL en Java en caso de una violación de restricción, pero que no está sucediendo. Cuando el procedimiento se ejecuta manualmente desde SSMS, puedo ver que imprime el error de violación de restricción, y luego continúa a lo largo del resto del proceso, que creo que es raro, yo esperaba que fallar. Así que cambié de esta manera:

CREATE PROCEDURE proc1
(
    @param DECIMAL
)
AS
    BEGIN
        BEGIN TRY
            INSERT INTO table1 (@param);
        END TRY
        BEGIN CATCH
            THROW 51000, 'Unable to insert', 1;
        END CATCH
        -- further commands
    END;
GO

Ahora cuando yo haga manualmente en SSMS, el procedimiento se detiene en caso de un fallo, e imprime mi mensaje de error. Sin embargo, el proceso de llamar a Java no está recibiendo ninguna indicación del error. ¿Cómo puedo propagar este error llamando a la capa de Java?

ACTUALIZACIÓN: Java capa de llamar a:

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
String connectionUrl = "jdbc:sqlserver://x.x.x.x;database=x";

try (Connection conn = DriverManager.getConnection(connectionUrl, "x", "x")) {
    try (CallableStatement stmt = conn.prepareCall("{call proc1(?)}")) {
        stmt.setInt(1, 1);

        stmt.execute();

        System.out.println("Done");
    }
}

Al final, puedo ver el mensaje "Done" impreso en la consola.

Y Guzmán:

Añadir SET NOCOUNT ONque la primera declaración en el proc para suprimir los DONE_IN_PROC(recuento de filas) Los mensajes de TDS. De lo contrario, el código se necesita consumir todos los resultados devueltos utilizando una ResultSety getMoreResultsantes de que se elevó el error en el cliente.

Supongo que te gusta

Origin http://10.200.1.11:23101/article/api/json?id=389813&siteId=1
Recomendado
Clasificación