2013-04-24 133 views
0

我在本教程的最後一頁:http://www.homeandlearn.co.uk/java/delete_a_record_from_a_database.html這是關於刪除Derby數據庫中的記錄的。我的刪除按鈕的代碼如下:在java Derby數據庫中刪除行

private void btnDeleteRecordActionPerformed(java.awt.event.ActionEvent evt) {             
    try{ 

    String host = "jdbc:derby://localhost:1527/Employees"; 
    String uName = "bjorn"; 
    String uPass= ""; 
    con = DriverManager.getConnection(host, uName, uPass); 
    PreparedStatement pstmt = con.prepareStatement("SELECT * FROM App.Workers",ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); 
    con.setAutoCommit(false); 
    rs = pstmt.executeQuery(); 
    //count++; 
    if (rs.absolute(count)) { 
    rs.absolute(count); 
    //rs.next(); 
    rs.deleteRow(); 

    pstmt.close(); 
    rs.close(); 
    } 

    } 
    catch (SQLException err) { 
    System.out.println(err.getMessage()); 
    } 

}  

我有兩個問題: 爲什麼rs.deleteRow();不行?
當我包括在此方法下面的代碼,它給我的錯誤:

Invalid operation at current cursor position. 

stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); 

     String sql = "SELECT * FROM App.Workers"; 
     rs = stmt.executeQuery(sql); 

     int id_col = rs.getInt("ID"); 
     String id = Integer.toString(id_col); 
     String first2 = rs.getString("First_Name"); 
     String last2 = rs.getString("Last_Name"); 
     String job2 = rs.getString("Job_Title"); 

     textID.setText(id); 
     textFirstName.setText(first2); 
     textLastName.setText(last2); 
     textJobTitle.setText(job2); 
     stmt.close(); 

此代碼應該重新放入文本字​​段中的所有數據。什麼是不給這個異常的工作代碼?

回答

1
  1. ResultSet.deleteRow()從ResultSet和DB刪除行,但你必須調用ResultSet.next()去的第一排,然後才能刪除或讀到的東西。另外,deleteRow()刪除當前行,並且因爲您沒有當前行集,所以沒有什麼可以刪除。
  2. 在您使用ResultSet獲取物品之前,您首先必須執行ResultSet.next(),才能進入第一行。

對於你的問題,你做executeQuery()後,在這兩種情況下添加行rs.next();。但請注意,這只是一個快速修復,您應該始終檢查是否有可用的行,並執行您的任務。

+0

當我按下刪除按鈕時,我的應用程序崩潰,無論我嘗試。你能通過改變上面的代碼來提供工作代碼嗎? – user1189952 2013-04-24 20:05:07

+0

@ user1189952更新了答案。 – 2013-04-24 20:08:34