(存储过程在 MySQL Workbench 中完美运行并且还检索行)
这是我的代码:
ConnectionManager cm = new ConnectionManager();
java.sql.CallableStatement cstmt = null;
try
{
connect = cm.getConnection();
connect.createStatement();
String SQL = "{call getReportDetails ('"+ emailId +"','"+password+"')}";
cstmt = connect.prepareCall(SQL);
rs = cstmt.executeQuery(SQL);
int i = 0;
while(rs.next())
{
String element1 = rs.getString("description");
// -- some code --
}
}
catch(Exception e)
{
e.printStackTrace();
}
最佳答案
删除带有createStatement
的行。
并且(错误)不要使用 SQL 作为 executeQuery 的参数。
(带有 sql 参数的重载版本是针对直接的、非准备语句版本。)
进一步关闭语句和结果集; try-with-resources 在这里会很好。
try (CallableStatement cstmt =
connect.prepareCall"{call getReportDetails (?, ?)}")) {
cstmt.setString(1, emailId);
cstmt.setString(2, password);
try (ResultSet rs = cstmt.executeQuery()) {
int i = 0;
while (rs.next())
{
String element1 = rs.getString("description");
// -- some code --
}
}
}
在存储函数的一般情况下,您可能需要自己指定结果:
cstmt.registerOutParameter(1, Types.INTEGER);
cstmt.registerOutParameter(2, Types.VARCHAR);
rs.getString(2);
但是这里有一个结果集。
关于java.sql.SQLException : ResultSet is from UPDATE. 无数据。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24825402/