1

SQL Server 2008 で次のストアド プロシージャを作成しました。

Create PROCEDURE countInfected @infected int out
AS
Select @infected = COUNT(*) from userInfo where userID NOT IN (Select userID from deletedInfo);

私のJavaコードは次のとおりです

CallableStatement infected = con.prepareCall("exec countInfected()");
infected.registerOutParameter(1, java.sql.Types.INTEGER);
infected.execute();
    System.out.println("Infected"+ infected.getInt(1));

しかし、それは次のエラーを生成します

core.dtable.Dbase.stored での java.lang.NullPointerException (Dbase.java:51)

私が間違っているところを教えてください

4

3 に答える 3

1
     try {
        conn     = DBConnection.SQLDB();
        conn.setAutoCommit(false) ;
        CallableStatement cs = null;
        cs = conn.prepareCall("{call dbo.xxCount(?)}");
        cs.registerOutParameter(1, java.sql.Types.INTEGER);
        cs.execute() ;
        System.out.println("INFECTED "+cs.getInt(1));
    }catch (Exception err){

ストアド プロシージャへの呼び出しでパラメーターを出力します。

于 2013-06-21T11:24:01.953 に答える
0

解決策を見つけました。SQLコードにステートメントを追加するだけです

Create PROCEDURE countInfected @infected int out
AS
Select @infected = COUNT(*) from userInfo where userID NOT IN (Select userID from deletedInfo);
return @infected;

そして、これは私のために働きます

于 2013-06-26T05:48:38.483 に答える
0

完全なコードが投稿されていないので、nonInfected.registerOutParameter(1, java.sql.Types.INTEGER);51行目だと思います。これnonInfectedは、特定のプロシージャを呼び出すために必要なものです。

@infected は、SQL クエリでは使用されません。in/out ではなく、out 型のパラメーターであってはなりません。

nonInfected.registerOutParameter(1, java.sql.Types.INTEGER);完全に削除して実行してみてください。

于 2013-06-21T08:37:10.163 に答える