Java 初学者JDBC结果集问题

Java 初学者JDBC结果集问题,java,jdbc,Java,Jdbc,我不熟悉使用JDBC,我想知道是否所有的操作都会产生一个结果集。例如,我通过以下方式制作语句以插入/更新数据库: StringBuffer query1 = new StringBuffer("UPDATE table SET col1 = value, WHERE some_col = some_val"); PreparedStatement pstmt1 = con.prepareStatment(query1.toString()); ResultSet rs1 = pstmt1.exe

我不熟悉使用JDBC,我想知道是否所有的操作都会产生一个结果集。例如,我通过以下方式制作语句以插入/更新数据库:

StringBuffer query1 = new StringBuffer("UPDATE table SET col1 = value, WHERE some_col = some_val");
PreparedStatement pstmt1 = con.prepareStatment(query1.toString());
ResultSet rs1 = pstmt1.executeQuery();
那么,当执行此代码段时,是否会执行适当的更新并完成?或者我是否需要以某种方式处理结果集以完成操作

提前感谢您的帮助。

您应该使用而不是。它返回一个
int
,指示受影响行的数量

int affectedRows = preparedStatement.executeUpdate();
也就是说,以这种方式构造SQL字符串不是正常的习惯用法。您希望使用占位符
并使用
PreparedStatement
设置器来设置值

String sql = "UPDATE table SET col1 = ? WHERE some_col = ?";
// ...    
preparedStatement = connection.prepareStatment(sql);
preparedStatement.setString(1, col1);
preparedStatement.setString(2, someCol);
int affectedRows = preparedStatement.executeUpdate();
// ...
另见:

t此类声明还有另一种方法:

s.execute(“…”)

不,您不必处理结果集-它无论如何都将为空,因为更新操作不应从数据库返回结果。通常,您会在语句中调用不同的方法:

StringBuffer query1 = new StringBuffer("UPDATE table SET col1 = value, WHERE some_col = some_val");
PreparedStatement pstmt1 = con.prepareStatment(query1.toString());
int rowCount = pstmt1.executeUpdate();

我正在遵循项目经理给我的某种模板。我是一名新毕业生,也是公司的新员工,所以我在学习过程中尽量坚持他们的程序。事实上,在某些情况下,更新会返回一个结果集,在这种情况下,execute()应该与getResultSet()一起使用。@a_horse:这取决于SQL字符串,即使如此,您更希望使用
CallableStatement
。我大致猜您是在谈论返回insert ID,因为JDBC提供了
getGeneratedKeys()
方法,以后可以使用该方法(您只依赖于JDBC驱动程序,如果它受支持的话;到目前为止,大多数驱动程序都支持它,只有Oracle的驱动程序不支持它(现在?)。另请参见。我不是在谈论getGeneratedKeys()。一些DBMS支持“RETURNING”子句(用于UPDATE、DELETE和INSERT语句)。对于UPDATE语句,execute()将返回一个包含所有修改行的结果集。DELETE语句将返回一个包含所有已删除行的结果集。@A_horse:
CallableStatement
。另请参阅链接。它似乎依赖于JDBC驱动程序和DBMS。我可以运行“从emp中删除,其中id>42返回*”(在PostgreSQL中)。当运行execute()时,getResultSet()将返回一个包含所有已删除行的结果集。不需要CallableStatement;)谢谢你的链接。我在实际代码中使用PreparedStatement setters。我可能应该在我的代码片段中更具体一些。我道歉。