JDBC错误:java.sql.SQLException:无法提交空查询

时间:2016-10-26 13:01:39

标签: sql jdbc

我正在尝试使用JDBC并使用以下命令查询数据库

CallableStatement call_state =null;
call_state =con.prepareCall("UPDATE district SET d_next_o_id = ?+1 WHERE d_id = ? AND d_w_id = ?");
call_state.setInt(1, d_next_o_id);
call_state.setInt(2, d_id);
call_state.setInt(3, d_w_id);           
rs=call_state.executeQuery();`

我遇到了一个异常:java.sql.SQLException:无法提交空查询。

1 个答案:

答案 0 :(得分:3)

即使CallableStatement(CS)是“用于执行SQL存储过程的接口”,它也是PreparedStatement的子接口。出于这个原因,任何遵守Liskov Substitution Principle的CS实现也应该能够执行正常的UPDATESELECTDELETE操作(任何简单的PreparedStatement可以做。)

您的代码的实际问题出在您提供的代码段的最后一行;您在UPDATE语句中使用executeQuery(),这不起作用。相反,您应该使用execute()executeUpdate()。所以将该行改为

call_state.executeUpdate();

应该有用。

如果您想“正确”执行此操作,则应该是惯用的并使用PreparedStatement而不是CallableStatement - 因为您没有调用任何存储过程。此外,您应该使用try-with-resources statement

来关闭资源
try (PreparedStatement ps = con.prepareStatement(
        "UPDATE district SET d_next_o_id = ?+1 WHERE d_id = ? AND d_w_id = ?")) {
    ps.setInt(1, d_next_o_id);
    ps.setInt(2, d_id);
    ps.setInt(3, d_w_id);           
    ps.executeUpdate();
} catch (SQLException e) {
  // handle it
}