java ResultSet覆盖

bob*_*mac 2 java sql resultset multiple-resultsets

我似乎对我的结果集有一些问题,我给它们命名不同,但它们似乎都有相同的数据,但我无法弄明白为什么.

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();
Run Code Online (Sandbox Code Playgroud)

我看过调试,他们都有相同的列,但我不认为他们应该有任何建议.

Per*_*ror 6

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

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

ResultSet rs1 = st1.executeQuery();
ResultSet rs2 = st2.executeQuery();
Run Code Online (Sandbox Code Playgroud)

来自Statement API.

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

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