2014-11-14 2 views
0

if 문을 만들려고했지만 작동하지 않습니다. jtable에서 isbn 책을 찾았 으면 "book"을 삭제하십시오. "else"book "을 찾을 수 없습니다. ?IF ELSE 문을 java delete sql join 메시지에서 삭제

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을 삽입하면 메시지는 수 있습니다 : "책 삭제 ", 만약 내가 올바른 isbn을 삽입 메시지 e는 "책을 찾을 수 없습니다"이며 올바른 isbn을 다시 삽입하면 메시지는 "책 삭제"이고 책은 데이터 배에서 삭제됩니다.

+0

이 코드는 NullPointerException - 'if (emps.next())'를 발생시킵니다. 그것이 실제 실행중인 코드입니까? – Eran

+0

당신의 부하가 null – Pravin

+0

일하지 않음으로써 당신은 무엇을 의미합니까? 여기서'emps'의 인스턴스를 만들면 다음 메서드를 호출 할 때 null이됩니다. – user902383

답변

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

    if (deleted == 0) { 
    ... 

INT의 executeUpdate의()는 같은 INSERT, UPDATE 또는 DELETE로되는 SQLException이

이 (DML) 문은 SQL 데이터 조작 언어 이 PreparedStatement 오브젝트의 SQL 문을 실행 던져 ; 또는 아무것도 반환하지 않는 SQL 문 (예 : DDL 문)

반환 값 : 중 하나 (1) SQL 문에 대한 SQL 데이터 조작 언어 (DML) 문 (2) 공의 행 수는 변수 deleted이 잘못 해석 된

+0

나는 당신의 솔루션을 시도했지만 이상하게 작동합니다. 첫 번째 게시물을 업데이트합니다. 고마워. – neo999

+0

pst.executeUpdate()는 삭제 된 행 수를 반환합니다. if (deleted == 0) -> 아무것도 삭제되지 않았습니다. 그래서 : LIBRO NON TROVATO if (deleted> 0) -> book, deleted : 그래서 LIBRO ELIMINATO – Joeblade

+0

@Joeblade ahh right !!! 이제 나는 그것을 이해한다. 사실, 코드를 수정 (반전)하고 이제는 완벽하게 작동합니다. 고마워요 !!! – neo999

1

아무것도 돌려주지 않는 그. 또한 모든 prepareStatement에 대해 SQL 드라이버에 문의하는 것이 좋습니다.

Oracle 클래스를 가져올 필요가 없습니다. JDBC를 사용하면 공급 업체에 종속되지 않습니다.

모범 사례는 pst를 자동으로 닫는 try-with-resources를 사용하고 있습니다.

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

관련 문제