java - 在结果集打开时执行语句 (JDBC/JAVA)

标签 java jdbc

在打开结果时执行独立语句是否安全或建议这样做?它们是否附加到不同的连接或与结果集相同的连接有关系吗?我特别关心结果如何持有锁(如果有的话),这可能会导致死锁。

例如。

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_ONLYTYPE_FORWARD_ONLY一般来说,不应生成阻止写入的锁。使用相同的Connection还建议使用对象,因为这样游标和修改其他对象的 SQL 都在同一个事务中,因此不太可能导致死锁。

关于java - 在结果集打开时执行语句 (JDBC/JAVA),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20624176/

相关文章:

java - 在 jframe 上显示列表

java - 使用jdbc计算sql表的行数

java - PostgreSQL 不关闭连接

java - 如何将日期值设置到单元格中

java - 从 PLSQL 过程获取值列表

java - 使用 JSF 2 和 EJB 3.1 的 @Stateful 和 @SessionBean 有什么区别?

java - 使用 Liferay 6.1 在 Tomcat 7 环境中设置 JNDI

java - Microsoft SQL Server JDBC 驱动程序 -SSL 问题

java - db2 的 ExceptionInInitializerError

java - Java 中是否有一个函数允许您将字符串转换为 Int ,考虑到字符串中包含您想要忽略的字符?