Raise Java SQLException de procédure stockée SQL Server?

Gábor Major:

J'ai une procédure stockée SQL Server similaire à ceci:

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

Cette procédure est appelée à partir de Java. J'introduit une contrainte unique sur table1, sur la même colonne qui est insérée au- dessus. Devrait obtenir un SQLException en Java en cas d'une violation de contrainte, mais il ne se produit pas. Lorsque la procédure est exécutée manuellement à partir SSMS, je peux voir qu'il imprime l'erreur de violation de contrainte, et continue ensuite sur le reste du processus, que je pense est bizarre, je m'y attendais à l' échec. Donc , je l' ai changé comme ceci:

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

Maintenant, quand je le faire manuellement dans SSMS, la procédure s'arrête en cas d'échec, et imprime mon message d'erreur. Cependant, le processus d'appel Java ne reçoit aucune indication de l'erreur. Comment puis-je propager cette erreur à la couche d'appeler Java?

MISE À JOUR: Java couche d'appel:

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");
    }
}

A la fin, je peux voir le message « Terminé » imprimé à la console.

Et Guzman:

Ajouter SET NOCOUNT ONcomme première instruction du proc pour supprimer les DONE_IN_PROC(rowcount) messages TDS. Dans le cas contraire, le code devra consommer tous les résultats retournés en utilisant un ResultSetet getMoreResultsavant que l'erreur est soulevé sur le client.

Je suppose que tu aimes

Origine http://10.200.1.11:23101/article/api/json?id=389811&siteId=1
conseillé
Classement