在使用java操作数据库时通常步骤有:
1、加载数据库驱动:Class.forName("com.mysql.jdbc.Driver");;
2、创建数据库链接:Connection conn = DriverManager.getConnection(URL, NAME, PASSWORD);
3、创建Statment对象:Statement stmt=conn.createStatement();;
4、执行查询语句:ResultSet rs=stmt.executeQuery("SELECT * FROM userdetails");
5、处理结果集 :
while(rs.next()) {
System.out.println(rs.getString(“****”)+" "+rs.getString("username"));
}
6、关闭链接,关闭数据库。
那出现标题错误的原因主要时,创建stmt对象后,使用同一对象连续执行了多次查询语句,但按实际情况时创建stmt对象后执行了rs查询语句后,就会关闭对应的链接,此时再执行rst则会报错。
//错误的代码如下:
stmt=conn.createStatement();
rs=stmt.executeQuery("select * from t1");
rst=stmt.executeQuery("select * from t2");
rs.last();
/**由于执行了rs=stmt.executeQuery(sql_a);rs就会被关闭掉!
所以程序执行到此会提示ResultSet已经关闭.
错误信息为:java.sql.SQLException: Operation not allowed after ResultSet closed
*/
rst.last();
解决办法如下:
方法1:
stmt=conn.createStatement();
rs=stmt.executeQuery("select * from t1");
rs.last();//对rs的操作应马上操作,操作完后再从数据库得到rst,再对rst操作
rst=stmt.executeQuery("select * from t2");
rst.last();
方法2:
多个stmt对应各自的rs.
stmt=conn.createStatement();
stmt2=conn.createStatement();
rs=stmt.executeQuery("select * from t1");
rst=stmt2.executeQuery("select * from t2");
rs.last();
rst.last();