2013-03-16 58 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语句仍然执行。我认为catch语句必须执行,因为在数据库中找不到输入的ISBN。从Java数据库中删除wamp服务器

+0

我可以评论,所以你会介意帮助我在这里。 http://stackoverflow.com/questions/26535629/record-not-getting-deleted-from-mysql-databases-table-while-its-deleted-from-j – 2014-10-24 08:28:12

回答

0

尝试仍然会运行。它只是删除0行。您需要使用返回值executeUpdate()。由于executeUpdate()返回一个int;更新或删除的实体数量可以用它来解决您的问题。你可以抛出一个异常来获取你的错误信息。

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

谢谢老兄救生员! :) – user1685563 2013-03-16 07:04:28

+0

标记为答案,这是你如何感谢StackOverflow的人。 – Sanchit 2013-03-16 07:23:50

0

在选择查询中,'找不到记录'不是例外。 stmt.executeUpdate(query);将返回删除记录的数量。

+0

谢谢。我会记住这一点。 :) – user1685563 2013-03-16 07:04:51

0

从数据库的角度来看这根本不是一个错误,它只是没有找到任何匹配的记录给你的where条件。 这就是为什么你没有抛出客户端异常。

0

如果我输入了一些让temp等于'或''='的东西,所有的ccItems都会被删除,这是一个SQL注入攻击。

0

它不会给出任何错误,因为如果ISBN不存在,它只会产生零行而没有任何错误。

如果您想确切知道是否有任何行被删除,请像这样写代码。

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."); 
    } 
}