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(Dbase.java:51)处的 java.lang.NullPointerException

请指导我哪里错了

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

由于没有发布完整的代码,我假设nonInfected.registerOutParameter(1, java.sql.Types.INTEGER);是第 51 行。什么是nonInfected调用给定过程所需的代码。

@infected 不在 SQL 查询中使用,如果它不只是输出类型参数而不是输入/输出。

尝试nonInfected.registerOutParameter(1, java.sql.Types.INTEGER);完全删除并运行。

于 2013-06-21T08:37:10.163 回答
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 回答