2013-03-16 4 views
0
public void deleteBook(int temp) 
{ 
    try 
    { 
     query = "DELETE FROM ccItems WHERE ISBN = '"+temp+"'"; 

     stmt.executeUpdate(query); 

     JOptionPane.showMessageDialog(null, "Item Deleted !"); 
    }  

    catch(Exception e) 
    { 
     JOptionPane.showMessageDialog(null, "Error: Could not find ISBN or Already deleted."); 
    } 
} 

나는 내 데이터베이스의 항목을 삭제할 방법이 deleteBook()입니다. 해당 ISBN을 입력하여 지정된 항목을 삭제하면 올바르게 작동합니다. 문제는 사용자가 이 내 데이터베이스에없는 ISBN을 입력하면try 문이 여전히 실행된다는 것입니다. 입력 한 ISBN을 데이터베이스에서 찾을 수 없으므로 catch 문을 실행해야한다고 생각합니다.자바 데이터베이스에서 데이터베이스에서 삭제

+0

여기에서 나를 도울 수 있습니다. http://stackoverflow.com/questions/26535629/record-not-getting-deleted-from-mysql-databases-table-while-its-deleted-from-j –

답변

0

시도가 계속 실행됩니다. 그냥 0 행을 삭제합니다.

executeUpdate()의 반환 값을 사용해야합니다. executeUpdate()는 int를 반환하기 때문에; 업데이트되거나 삭제 된 엔티티의 수를 사용하여 문제를 해결할 수 있습니다. 오류 메시지를 얻기 위해 예외를 throw 할 수 있습니다.

public void deleteBook(int temp) 
{ 
    try 
    { 
     query = "DELETE FROM ccItems WHERE ISBN = '"+temp+"'"; 
     if (stmt.executeUpdate(query)!=0) { 
      JOptionPane.showMessageDialog(null, "Item Deleted !"); 
     } else { 
      throw new Exception(); 
     } 
    }  
    catch(Exception e) 
    { 
     JOptionPane.showMessageDialog(null, "Error: Could not find ISBN or Already deleted."); 
    } 
} 
+0

thanks dude life saver! :) – user1685563

+0

답변으로 표시, 그게 어떻게 StackOverflow에 사람들에게 감사합니다. – Sanchit

0

선택 쿼리와 마찬가지로 '레코드 없음'도 예외가 아닙니다. stmt.executeUpdate(query);은 삭제 된 레코드 수를 반환합니다.

+0

감사합니다. 나는 그것을 명심 할 것이다. :) – user1685563

0

데이터베이스의 관점에서 은 전혀 오류가 아니며이며 where 조건에 맞는 일치하는 레코드를 찾지 못했습니다. 그래서 클라이언트에 예외가 발생하지 않습니다.

0

temp를 '또는' '='으로 만들기 위해 뭔가를 입력하면 모든 ccItem이 삭제됩니다. 즉 SQL 주입 공격입니다.

0

ISBN이 없으면 아무런 오류없이 0 행에 영향을주기 때문에 오류가 발생하지 않습니다.

행이 삭제되었는지 정확하게 알고 싶다면 다음과 같은 코드를 작성하십시오.

public void deleteBook(int temp){ 
    try{ 
     query = "DELETE FROM ccItems WHERE ISBN = '"+temp+"'"; 
     int numberOfRowsEffected = stmt.executeUpdate(query); 
     if (numberOfRowsEffected == 0){ 
      JOptionPane.showMessageDialog(null, "Item not found !"); 
     }else{ 
      JOptionPane.showMessageDialog(null, "Item Deleted !"); 
     } 
    } catch(Exception e){ 
     JOptionPane.showMessageDialog(null, "Error: Could not find ISBN or Already deleted."); 
    } 
}