java - 连接损坏后 ResultSet 的行为

标签 java sql jdbc resultset

假设我正在进行 JDBC 调用,并且我已将数据从数据库提取到 ResultSet。但是由于网络问题,我失去了与数据库的连接。

(ConnectionStatementResultSet 在 DB 中未关闭)。我还能迭代 ResultSet 吗?

最佳答案

即使可以,也不应该,除非您针对非常具体的 jdbc 驱动程序进行编码。在某些情况下,根本不会构建结果集。在其他 (Oracle IIRC) 中,您可以对其进行配置,以便它只从总数中提取给定数量的行。

但是,一般来说,如果失去连接,您需要担心的事情比想知道是否可以遍历部分获取的结果集对象要多。在这种情况下,经验法则是

  1. 做最坏的打算;
  2. 尝试关闭结果集, 语句和连接;即使 物理连接丢失, 可能有像内存这样的资源 和调用方的文件句柄 需要处理掉;
  3. 如果可能,尝试获得一个新的 连接(无论是一个新的物理 一个或来自连接池)和 重新开始。

此外,根据经验,在事务中执行语句时,您不应该担心部分失败。丢弃并重新尝试。

在极少数情况下,数据库会向您发送供应商特定代码 (SQLException.getErrorCode()),告诉您是否可以重试该操作。 Oracle 有一些特定的代码(不记得它们),用于在您执行插入并且违反了唯一约束的情况下。有时可以重试此类失败的操作,但这是特定于供应商和业务的。

一般情况下,只需转储损坏的结果集并重新开始。

关于java - 连接损坏后 ResultSet 的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/951770/

相关文章:

java - InterviewBit : Hotel Bookings Possible. 解决方案适用于 IDE,但不适用于网站

java - 如何使 .jar 文件在没有 cmd 的情况下运行

sql - 将存储过程输入参数分配给局部变量是否有助于优化查询?

sql - 如何创建具有两个长列的表?

java - 有没有办法在 Java 中只读取 JSON 文件的一部分?

java - Tomcat 应用程序和存储在数据库中的全局变量。用于维护服务器和应用程序的管理器应用程序

sql - R 是否提供比 tryCatch() 更干净的东西来安全地进行 SQL 查询?

java - 我想将控制台上的输出打印到文本文件中。我尝试了下面的方法,但没有成功。有人可以看看这个吗?

java - Oracle 的 HikariConfig 池

java - NamedJDBCTemplate Parameters 是列表列表