getResultSet()“每个结果应该只调用一次”
根据java.sql.Statement
getResultSet
的文档 ,它说:
以ResultSet对象的forms检索当前结果。 每个结果只应调用一次此方法。
使用一些测试代码,我运行了executeQuery()
和几次调用getResultSet()
并观察到返回的ResultSet
指向同一个对象。 所以我猜它没有返回你需要单独关闭的不同ResultSet
。 但当然这对我的JDBC驱动程序来说可能是独一无二的。
查看ResultSet
的文档 ,它说:
默认的ResultSet对象不可更新,并且只有一个向前移动的游标。 因此,您只能迭代一次,并且只能从第一行到最后一行。
这似乎是一个很好的理由,为什么多次调用它可能不是一个好主意,因为它可能导致一些“陷阱”的情况。 如果这是唯一的原因,我觉得他们可能刚刚说过,所以我认为可能还有更多不仅仅是这个。
那么有谁知道为什么每个结果不应该多次调用getResultSet
? 这个问题首先让我好奇。
ResultSet
对象是Java JDBC提供的接口 – 它们不提供实现。 即使您的特定数据库代码和相关驱动程序实现了ResultSet
以便您可以对每个结果多次调用它,如果您依赖于合同之外的此类行为,那么您肯定会玩火。
使用this method should be called only once per result
编写合同的一个可能原因this method should be called only once per result
行this method should be called only once per result
是出于效率原因。 构建ResultSet很可能会对数据库进行JDBC RPC调用,而JDBC规范的作者则希望阻止多次往返。 他们可能不想强迫实施者有效地防止每个结果多次调用。 同样,即使您的数据库正在防范该行为,也不意味着下一个会这样做。
大多数ResultSet
实现还保持与数据库打开的连接,以便当您获得某些字段(例如大blob)时,它可以回调数据库以获取数据。 打开多个连接或(更糟)使用来自多个ResultSet
对象的相同连接将是非常危险/混乱的。
此外,他们可能一直担心代码的两个部分调用getResultSet()
两次,并返回对同一个未同步对象的引用。 这会在调用next()
时引起混淆并用多个引用覆盖对象。
我当然在猜测,但我希望这会有所帮助。
- Hibernate在EntityTuplizerFactory.constructTuplizer中失败并出现NullPointerException? 为什么?
- 如何在JBoss 6.4中禁用javax.validation.api
- 创建一个Spring枚举bean并传递方法调用的值
- 将文本加密为AES / CBC / PKCS7Padding
- 为什么java中的String.replaceAll()需要在正则表达式中使用4个斜杠“\\\\”来实际替换“\”?
- java.lang.IllegalAccessError:尝试从类org.slf4j.LoggerFactory访问字段org.slf4j.impl.StaticLoggerBinder.SINGLETON
- Hadoop 1.2.1 – 多节点集群 – 对于Wordcount程序,Reducer阶段是否挂起?
- 如何检测OutofMemoryError的原因?
- 在JNI中链接dll文件