选择计数返回0 mysql JDBC

选择计数返回0 mysql JDBC,mysql,select,jdbc,count,procedures,Mysql,Select,Jdbc,Count,Procedures,我试图存储消息,所以我用HeidiSql在mysql中创建了两个表,第一个是msg,第二个是users。我编写了一个存储过程来获取作为发送者的第一个参数、作为接收者的第二个参数和反之亦然的消息数。我将这个值存储在id变量中。我需要变量来计算两个人之间的消息。当我从java运行应用程序时,我总是得到id=0。我不明白这个错误 ... sql="call getIdMsg(?,?,?)"; sql2="call addRecord(?,?,?,?)"; try (Connection conn=

我试图存储消息,所以我用HeidiSql在mysql中创建了两个表,第一个是msg,第二个是users。我编写了一个存储过程来获取作为发送者的第一个参数、作为接收者的第二个参数和反之亦然的消息数。我将这个值存储在id变量中。我需要变量来计算两个人之间的消息。当我从java运行应用程序时,我总是得到id=0。我不明白这个错误

...

sql="call getIdMsg(?,?,?)";
sql2="call addRecord(?,?,?,?)";

try (Connection conn= DriverManager.getConnection(db_url,username,password);
         CallableStatement statement = conn.prepareCall(sql);
         CallableStatement statement2 = conn.prepareCall(sql2)){

        statement.setInt(1,sender);
        System.out.println(sender);
        statement.setInt(2,recipient);
        System.out.println(recipient);
        statement.registerOutParameter(3, Types.INTEGER);
        statement.execute();
        id=statement.getInt(3);

        System.out.println("ID is: "+id);

        statement2.setInt(1,sender);
        statement2.setInt(2,recipient);
        statement2.setInt(3,id);
        statement2.setString(4,msg);
        statement2.execute();
        System.out.println("The record is been added");
    }
    catch (SQLException sqle){sqle.printStackTrace();}
...
这是我的sql代码:

BEGIN
set @id = ((select count(*) from msg WHERE sender = @thisrecipient and recipient = @thissender)+(SELECT COUNT(*) FROM msg WHERE sender = @thissender and recipient = @thisrecipient));
END
以下是我的参数:

  • 这是一个整数

  • 这是一个整数

  • id INT OUT


  • 你能帮我吗?

    也许在“id=statement.getInt(3);”之前,你必须得到一些结果集并调用next()谢谢,我已经解决了。我使用一个准备好的语句,并将这个字符串作为参数传递:“从msg中选择count(id),其中sender=?和receiver=?”(我显然使用preparedstatement.setInt(int index))设置了?的值,然后我使用resultset存储我得到的查询,我调用resultset.next()和resultset.getInt(1)。如果您的过程out是一个游标,我想你可以给它分配一个结果集