我得到例外:
ResultSet关闭后不允许操作
它说问题出在方法“teamNumberGet = rs.getInt("something");"
我哪里错了?
代码:
try {
Class.forName("com.mysql.cj.jdbc.Driver");
Connection conn = DriverManager.getConnection(url, username, password);
Statement stmt = conn.createStatement();
String sql = "SELECT * FROM MatchScouting";
ResultSet rs = stmt.executeQuery(sql);
for (int ayooo = 1; ayooo < indexReadFromDatabase; ayooo++) {
rs.next();
}
ayo(rs, conn);
}
catch (SQLException e) {
throw new RuntimeException(e);
}
public static void ayo(ResultSet rs, Connection conn) throws SQLException {
int i = 0;
while (rs.next()) {
i++;
System.out.println("team---------------------------------" + i);
teamNumberGet = rs.getInt("something");
}
}
我试图找出是否有任何地方可以使结果集“rs”关闭,但它从来没有
您通过在同一结果集上循环两次,超过了
ResulSet
的最后一行。
首先你运行你的
for
循环(你忽略了向我们解释):
for (int ayooo = 1; ayooo < indexReadFromDatabase; ayooo++) {
rs.next();
}
然后将 ResultSet 传递给
mayo
方法,在该方法中继续调用 ResultSet#next
。我们不知道 indexReadFromDatabase
的值,但在某些时候您对 next
的连续调用会将光标移到结果集的末尾。
解决方案:只循环一次结果集.
其他问题:
Class.forName
。许多年前,JDBC 被更改为通过 Service Provider Interface (SPI) facility 自动加载驱动程序。try (
Connection conn = myDataSource.getConnection( myUrl , "" , "" ) ;
Statement stmt = conn.createStatement() ;
ResultSet rs = stmt.executeQuery(myQuery) ;
)
{
while ( rs.next() ) {
… process results
}
} catch ( SqlException e ) {
… handle exception
}