【问题标题】:Using a ResultSet after executing two different queries with statement.executeQuery() [duplicate]在使用 statement.executeQuery() 执行两个不同的查询后使用 ResultSet [重复]
【发布时间】:2015-06-10 20:11:31
【问题描述】:

给定下面的代码:

    //connection stuff
    ResultSet rs = statement.executeQuery(query1);

    statement.executeQuery(query2);

    while(rs.next){
       //code
    }

即使执行了第二条语句,结果集 rs 是否仍然有效?

我知道,当您关闭语句时,结果集不再有效,但这里的代码只是执行另一个查询,而不是将其存储在结果集中。

【问题讨论】:

  • 有多种方法可以对不同查询产生的具有相同结果列的结果集进行操作。例如,您可以在形成结果集之前对两个查询使用 SQL 集操作。还有其他选择。您需要告诉我们更多关于您要解决的问题的信息。
  • @Marco_MontaltoM 这是一个不同的问题,涉及语句的顺序使用,这个问题是关于语句的交错使用。

标签: java jdbc resultset


【解决方案1】:

假设statementStatement,来自javadoc

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

发布的代码不安全 - 第二次调用executeQuery 将返回一个新的ResultSet,并且一次只能打开一个rs 将无效。

【讨论】:

  • 谢谢你。当我遇到这个问题时,我非常不确定,但这完全有道理。因此,即使第二个 ResultSet 没有放入 ResultSet 对象中,第一个 ResultSet 也不再存在,并且会在调用 rs.next() 时引发运行时异常。
猜你喜欢
  • 1970-01-01
  • 2015-09-06
  • 1970-01-01
  • 2018-03-07
  • 1970-01-01
  • 1970-01-01
  • 2020-11-28
  • 2016-09-03
  • 1970-01-01
相关资源
最近更新 更多