【问题标题】:java ResultSet overwritejava ResultSet 覆盖
【发布时间】:2012-11-16 18:05:12
【问题描述】:

我的结果集似乎有一些问题,我给它们取了不同的名字,但它们似乎都有相同的数据,但我不知道为什么。

String query = "SELECT * FROM blog_comments;";
ResultSet rs = stmt.executeQuery(query);
ResultSetMetaData rsmd = rs.getMetaData();
int colNum = rsmd.getColumnCount();
boolean more = rs.next();

String query2 = "SELECT * FROM blog_entries;";
ResultSet rs2 = stmt.executeQuery(query2);
ResultSetMetaData rsmd2 = rs2.getMetaData();
int colNum2 = rsmd2.getColumnCount();
boolean more2 = rs2.next();

我查看了调试,它们都有相同的列,但我认为他们不应该有任何建议。

【问题讨论】:

  • 你不认为或者你确定?

标签: java sql resultset multiple-resultsets


【解决方案1】:

您需要一个新的 Statement 来实例化您的新 ResultSet。

Statement st1 = Conn.CreateStatement();
Statement st2 = Conn.CreateStatement();

ResultSet rs1 = st1.executeQuery();
ResultSet rs2 = st2.executeQuery();

来自Statement API

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

【讨论】:

  • 有什么特别的原因吗?
  • 来自 Javadocs:“默认情况下,每个 Statement 对象只能同时打开一个 ResultSet 对象。因此,如果一个 ResultSet 对象的读取与另一个 ResultSet 对象的读取交错,则每个必须由不同的 Statement 对象生成。Statement 接口中的所有执行方法都会隐式关闭一个语句的当前 ResultSet 对象,如果存在打开的对象。"
  • 是的,谢谢,我会尽快在网站上打勾
  • @quoi 抱歉,我的笔记本电脑刚刚自动重启,我将从 API 更新。
  • @IanRoberts 感谢您将其发布为评论。我将在我的答案中包含 APi 链接
猜你喜欢
  • 2010-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-04
  • 2014-03-06
  • 2014-09-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多