public static void main(String args[])
{
SQLConnector sqlConnect = new SQLConnector();
Connection conn = null;
try
{
conn= sqlConnect.getConnection();
CallableStatement cStmt = conn.prepareCall("{ call test(?,?,?)}");
cStmt.setDouble(1, 100.0);
cStmt.setInt(2, 1);
cStmt.registerOutParameter(3, java.sql.Types.VARCHAR);
ResultSet rs = cStmt.executeQuery();
if (rs.next()) {
System.out.println(rs.getString(3);
}
cStmt.execute();
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
sqlConnect.closeConnection(conn);
}
}
Run Code Online (Sandbox Code Playgroud)
此代码段会引发错误
java.sql.SQLException: ResultSet is from UPDATE. No Data.
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926)
Run Code Online (Sandbox Code Playgroud)
但是,如果我从MySQL Workbench传递相同的参数,它会提供适当的输出.
我正在使用MySQLServer 5.6.25和MySQLConnector 5.1.6.
请帮我解决这个问题.这看起来像我从Java调用MySQL的方式中的错误
请参阅此MySQL文档页面的第4部分:使用JDBC CallableStatements执行存储过程.
你不用executeQuery().你必须使用execute()和getResultSet().
由于您知道该语句将返回一个ResultSet,因此您的代码将变为:
cStmt.execute();
try (ResultSet rs = cStmt.getResultSet()) {
if (rs.next())
System.out.println(rs.getString(3));
}
Run Code Online (Sandbox Code Playgroud)
除了当然你可能是错的,因为调用不返回结果集,而是在输出参数中返回一个字符串,这完全改变了代码:
cStmt.execute();
System.out.println(cStmt.getString(3));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10638 次 |
| 最近记录: |