这段代码中的错误是什么?在数据库中找到重复的记录。

时间:2015-06-05 09:27:39

标签: java mysql

我希望在添加具有相同类型的新项目时在数据库中更新数量。数量已更新,但每次更新时都会保存新记录。我正在使用mysql查询浏览器和netbeans来开发这个软件。

ResultSet rs=DB.createConnection().createStatement().executeQuery("select * from orders where status=('"+1+"')");

            if (rs.next()) {
                System.out.println("DB True");

            do{

            System.out.println("in_While");
            int dctno=Integer.parseInt(rs.getString("ctno"));
            int dctype=Integer.parseInt(rs.getString("ctype"));
            int dqty=Integer.parseInt(rs.getString("qty"));

            int nw_qty=dqty+qty;

            if (dctno==ctno && dctype==ctype) {
                System.out.println("Equals/Stock ctype= "+ctype);
                DB.createConnection().createStatement().executeUpdate("update orders set qty=('"+nw_qty+"') where ctno=('"+ctno+"') and ctype=('"+ctype+"')");

                System.out.println("DB Updated");
                txtQuantity.setText("");
                dt.setRowCount(0);

            }else{
                System.out.println("Not");
                DB.createConnection().createStatement().executeUpdate("insert into orders(ctno,ctype,qty,date,status) values('"+ctno+"','"+ctype+"','"+qty+"','"+txtlDate.getText()+"','"+1+"')");

            }

           System.out.println("end_While");  

            }while (rs.next());

1 个答案:

答案 0 :(得分:1)

你的逻辑错了。您循环遍历整个结果集,并为集合中的每个记录执行操作。

所以,假设你有3行,一行符合你的标准,另外两行没有。在这种情况下,一个记录将被更新将插入两个新记录。

要修复它,你应该:

  1. 执行仅检索您可能要更新的记录的查询。
  2. 如果找到这样的记录,请更新它。
  3. 如果未找到记录,请插入新记录。
  4. 在旁注中,还有一些其他评论/评论:

    • 为什么要将所有值存储为数据库中的字符串,并将它们转换为应用程序中的数字。将数字存储在数据库中不是更容易吗?
    • 如评论中所述:使用预准备语句而不是字符串连接来构建查询。
    • 您可以重复使用您的连接。无需为您执行的每个查询创建新连接。