7

在 SQL 数据库上使用多个连续的 executeUpdate() 方法有多安全?

考虑2个陈述:

st.executeUpdate("INSERT table SELECT col1,col2 FROM table WHERE ID=" +var_id);
st.executeUpdate("DELETE FROM table WHERE ID=" +var_id);

他们的行为如何?第二条语句是等待第一条语句的完成,还是我们应该检查返回值(受影响的行数)并根据第二条语句采取相应的行动?

4

3 回答 3

6

对的调用executeUpdate不是异步的,因此在服务器上执行语句之前它不会返回。换句话说:这两个语句将起作用并且它们不会干扰,因为它们一个接一个地执行。

于 2012-07-10T15:50:29.387 回答
1

我不认为该语句可以作为单个实例同时执行多个查询。

第二个语句将等到第一个语句完成并返回
第二个语句只会在第一个语句完成后使用新查询设置。

这也适用于读取 ResultSet 的情况。
文档说:

默认情况下,每个 Statement 对象只能同时打开一个 ResultSet 对象。因此,如果一个 ResultSet 对象的读取与另一个 ResultSet 对象的读取交错,则每个对象都必须由不同的 Statement 对象生成。Statement 接口中的所有执行方法都会隐式关闭语句的当前 ResultSet 对象(如果存在打开的对象)。

于 2012-07-10T15:39:08.987 回答
0

The answer depends on whether or not you have autocommit turned on for your database.

If you have autocommit turned on, the second statement will wait for the first statement to complete and commit before executing.

If you have autocommit turned off, the second statement will execute after the first statement, but no changes will be applied to the database until a commit.

于 2012-07-10T15:42:24.590 回答