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