在打开结果时执行独立语句是否安全或建议这样做?它们是否附加到不同的连接或与结果集相同的连接有关系吗?我特别关心结果如何持有锁(如果有的话),这可能会导致死锁。
例如。
while(resultSet.next()) {
Execute separate statements in here ( same or different connection )
}
结果集是否由底层游标或其他内容支持?
泰
最佳答案
这里有几个问题。
首先,通常"is",在迭代 ResultSet
时运行其他 SQL 语句是可能且常见的。 。是的,ResultSets
由光标支持。
这样做也可能会造成死锁,因此您只需要注意这一点即可。如果在循环内执行的 SQL 未修改与 ResultSet
相同的表中的行,那么您应该确保 ResultSet
创建时并发模式为CONCUR_READ_ONLY
,一般尝试使用 TYPE_FORWARD_ONLY
.
例如:
Statement stmt = con.createStatement(ResultSet.TYPE_FORWARD_ONLY,
ResultSet.CONCUR_READ_ONLY);
如果您使用CONCUR_READ_ONLY
和TYPE_FORWARD_ONLY
一般来说,不应生成阻止写入的锁。使用相同的Connection
还建议使用对象,因为这样游标和修改其他对象的 SQL 都在同一个事务中,因此不太可能导致死锁。
关于java - 在结果集打开时执行语句 (JDBC/JAVA),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20624176/