2014-11-14 14 views
0

我試圖創建一個if語句,但不工作,如果找到isbn書在jtable,顯示消息「書」刪除「其他」書「找不到」,這是可能的?如果ELSE語句在java中刪除sql joption消息

private void elimina_libroActionPerformed(java.awt.event.ActionEvent evt) {  
    Connection conn = Connessione.ConnecrDb(); 
    Statement stmt = null; 
    ResultSet emps = null;  
     boolean found = false; 
    try{   
     if(emps.next()) 
     found= true; 
     String sql= "DELETE FROM progetto.libro WHERE isbn =?"; 
     pst=(OraclePreparedStatement) conn.prepareStatement(sql);    
     pst.setString (1, txt_isbn.getText());   
     pst.execute();    

    if (!found) 
     JOptionPane.showMessageDialog(null, "LIBRO ELIMINATO"); 
    else{  
      JOptionPane.showMessageDialog(null, "BOOK NOT FOUND","ERRORE",jOptionPane.WARNING_MESSAGE); 

    } 

    } 
    catch (Exception e) 
    { 
     JOptionPane.showMessageDialog(null,e); 
       }  

但不工作,你可以幫我感謝

我這個

Connection conn = Connessione.ConnecrDb(); 
    Statement stmt = null; 
    ResultSet emps = null; 

    try{ 

     String sql= "DELETE FROM progetto.libro WHERE isbn =?"; 

     pst=(OraclePreparedStatement) (PreparedStatement) conn.prepareStatement(sql);    
      pst.setString (1, txt_isbn.getText());   
     int deleted = pst.executeUpdate();    

if (deleted == 0) { 

     JOptionPane.showMessageDialog(null, "LIBRO ELIMINATO"); 
     Update_table(); 


      }else 
       JOptionPane.showMessageDialog(null, "LIBRO NON TROVATO"); 

    } 

    catch (Exception e) 
    { 
     JOptionPane.showMessageDialog(null,e); 

    }  

更改代碼,但如果我插入一個不正確的ISBN的消息是:「書刪除「,如果我插入正確的消息e是「book not found」,如果我再次插入正確的isbn,則該消息是「book delete」,並從數據庫中刪除該書。

+0

這段代碼會在這裏拋出NullPointerException - 'if(emps.next())'。這是你正在運行的實際代碼嗎? – Eran 2014-11-14 14:22:16

+0

你的emps爲空 – Pravin 2014-11-14 14:22:55

+0

你的意思是不工作是什麼意思?在你創建'emps'實例的時候,當你調用下一個方法時它是空的 – user902383 2014-11-14 14:23:53

回答

1
pst=(PreparedStatement) conn.prepareStatement(sql);    
    pst.setString (1, txt_isbn.getText());   
    int deleted = pst.executeUpdate();    

    if (deleted == 0) { 
    ... 

INT的executeUpdate()拋出的SQLException

執行SQL語句在此PreparedStatement對象,其 必須是一個SQL數據操縱語言(DML)語句,如 INSERT,UPDATE或DELETE ;或者一個不返回任何內容的SQL語句,如DDL語句, 。

返回: :(1)對於SQL數據操作語言(DML)語句(2)0 SQL語句的行數表示不返回任何

+0

我嘗試了你的解決方案,但工作很奇怪。我更新了我的第一篇文章。非常感謝。 – neo999 2014-11-14 14:44:56

+0

pst.executeUpdate()將返回刪除的行數。 if(deleted == 0) - >沒有東西被刪除。所以:LIBRO NON TROVATO if(deleted> 0) - > book(s)deleted,so:LIBRO ELIMINATO – Joeblade 2014-11-14 14:47:31

+0

@Joeblade ahh right !!!現在我明白了。事實上,修復代碼(反轉),現在完美工作。非常感謝!!! – neo999 2014-11-14 15:01:27

1

變量deleted被解釋錯了。同樣,對於每個prepareStatement,更好地關閉它,因爲您正在聯繫SQL驅動程序。

無需導入Oracle類; JDBC允許獨立於供應商。

最佳做法是使用try-with-resources自動關閉pst。

String sql = "DELETE FROM progetto.libro WHERE isbn = ?"; 
try (PreparedStatement pst = conn.prepareStatement(sql)) { 
    pst.setString (1, txt_isbn.getText());   
    int deletionsCount = pst.executeUpdate();    
    if (deletionsCount > 0) { 
     JOptionPane.showMessageDialog(null, "LIBRO ELIMINATO"); 
     Update_table(); 
    } else { 
     JOptionPane.showMessageDialog(null, "LIBRO NON TROVATO"); 
    } 
} 
catch (SQLException e) 
{ 
    JOptionPane.showMessageDialog(null, e); 
} 
+0

非常感謝。你的解決方案也是完美的。再次感謝。 – neo999 2014-11-14 15:02:37