【问题标题】:Deleting from Database in Java wamp server从 Java wamp 服务器中的数据库中删除
【发布时间】:2013-03-16 06:50:14
【问题描述】:
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 mysql database wamp


【解决方案1】:

与选择查询一样,“未找到记录”也不例外。stmt.executeUpdate(query); 将返回删除的记录数。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      它不会给出任何错误,因为如果 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.");
          }
      }
      

      【讨论】:

        【解决方案4】:

        尝试仍会运行。它只是删除了 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.");
            }
        }
        

        【讨论】:

        • 标记为已回答,这就是你在 StackOverflow 上感谢人们的方式。
        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 2014-03-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-09-20
          • 2014-09-27
          • 1970-01-01
          相关资源
          最近更新 更多