【问题标题】:MySQL workbench returns stored procedure with multiple rows, but from Java code, only one row is returnedMySQL工作台返回多行的存储过程,但从Java代码中,只返回一行
【发布时间】:2020-06-26 17:26:44
【问题描述】:

它是MYSQL,在Workbench中同样的存储过程调用可以正常工作,但是从Java代码中,它总是只返回一行。

String sql = "{ CALL getList(?, ?, ?) }";

CallableStatement cs = conn.prepareCall(sql);
cs.setLong(1, key);
cs.setString(2, id);
cs.setInt(3, java.sql.Types.INTEGER);
ResultSet rs = cs.executeQuery();
rtn = cs.getInt(3);             // this return as 1

while (rs.next()) {
     String name = rs.getString("name");
     String age= rs.getString("age");
     //.....
}

从这个while循环中,总是而且只返回一行,很奇怪,花了几个小时,还没有头绪,请指教可能出了什么问题,提示MYSQL是旧版本5.3,Java是旧版本JDK 1.6。

哪位有经验的,请指教,谢谢。

【问题讨论】:

标签: mysql jdbc procedure workbench


【解决方案1】:

除了你所拥有的,你还需要实现 add() 方法。试试这个:

String sql = "{ CALL getList(?, ?, ?) }";

CallableStatement cs = conn.prepareCall(sql);
cs.setLong(1, key);
cs.setString(2, id);
cs.setInt(3, java.sql.Types.INTEGER);
ResultSet rs = cs.executeQuery();
rtn = cs.getInt(3);           

while(rs.next()) {
    String name = add(rs.getString("name"));
    String age= add(rs.getString("age"));
} 

【讨论】:

  • 对不起,我不太清楚这个add指的是什么,我可以得到一排,问题是只能得到一排,而不是多排,请您指教,谢谢。
  • 你有这个:rs.getString("name");我建议你改用这个: add(rs.getString("name")); .你是说你试过了还是不行?
  • 问题是 rs.next() 无法拉出下一行,但代码在循环内,我对这个 add() 方法指的是什么感到困惑,我没有实现它,需要先了解它,谢谢您的快速响应。
  • 你如何得出OP需要编写一些名为add()的方法的结论?
猜你喜欢
  • 2012-04-16
  • 1970-01-01
  • 2013-05-07
  • 1970-01-01
  • 1970-01-01
  • 2015-10-14
  • 2016-04-14
  • 1970-01-01
  • 2018-08-13
相关资源
最近更新 更多