从Java wamp服务器中的数据库中删除
我有一个从Java wamp服务器中的数据库中删除,java,mysql,database,wamp,Java,Mysql,Database,Wamp,我有一个deleteBook()方法,可以删除数据库中的项目。它工作正常,意味着删除输入了相应ISBN的指定项目。问题是,如果用户输入的ISBN不在我的数据库中,try语句仍会执行。我认为必须执行catch语句,因为在数据库中找不到输入的ISBN。try仍将运行。它只删除0行 您需要使用的返回值。因为executeUpdate()返回一个int;更新或删除的实体数您可以使用它来解决您的问题。您只需抛出一个异常即可获取错误消息 public void deleteBook(int temp) {
deleteBook()
方法,可以删除数据库中的项目。它工作正常,意味着删除输入了相应ISBN的指定项目。问题是,如果用户输入的ISBN不在我的数据库中,try
语句仍会执行。我认为必须执行catch
语句,因为在数据库中找不到输入的ISBN。try仍将运行。它只删除0行
您需要使用的返回值。因为executeUpdate()返回一个int;更新或删除的实体数您可以使用它来解决您的问题。您只需抛出一个异常即可获取错误消息
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.");
}
}
与select查询一样,“未找到记录”也不例外。
stmt.executeUpdate(查询)
将返回已删除的记录数。从数据库的角度来看,这根本不是错误,它只是在where条件下找不到任何匹配的记录。
这就是为什么您不会在客户端上引发异常。如果我输入一些东西使temp等于“或”=',您的所有CCItem都将被删除,这是一种SQL注入攻击。它不会给出任何错误,因为如果ISBN不存在,它只会影响零行而不会产生任何错误 如果您想确切地知道是否删除了任何一行,请这样编写代码
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.");
}
}
马克回答说:“这就是你在StackOverflow上感谢人们的方式。我可以发表评论,所以你介意在这里帮助我吗?”。
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.");
}
}