【Mysql數據庫】使用java操作數據庫查詢語句時報錯:Operation not allowed after ResultSet closed

在使用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();

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章