mysql数据库问题中的重复行

时间:2012-12-21 01:17:37

标签: java mysql database

我在SO上检查了类似的答案,他们大多建议使用结果集来检查数据库中是否已存在该条目。不知道我在这里做错了什么

      public void setMonitorData(String name, monitorData data){
    Statement stmt = null;
    PreparedStatement stmtInsert;
    PreparedStatement stmtUpdate;
    ResultSet rs = null;
    for(int i = 0; i<data.wiredVector.size(); i++){
        if(data.wiredVector.elementAt(i).getInterfaceName().equals(name)){

            try{
                String checkRecord = "SELECT * FROM list_A WHERE NAME = '" + name + "'";
                stmt = conn.createStatement();
                rs = stmt.executeQuery(checkRecord);

                if(!rs.next()){  
                    String insertData = "INSERT INTO list_A (NAME, mac_add, ip_add,  default_gateway,"
                            + " net_add, mask, broad_add, max_transfer_rate, curr_transfer_rate,"
                            + " curr_used_bandwidth, packet_error_rate )"
                            + "VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";

                 //preparedStatemend code here....

         else{
              String update = "UPDATE list_A SET ..."       

         .....
         }

我执行代码后...在数据库中有一些dublicate记录,好像它完全跳过了这个条件

3 个答案:

答案 0 :(得分:1)

这里你把“if(!rs.next())”移到过去的记录。 所以这里它将从之前的一行开始,这就是它可以允许重复值的原因。

答案 1 :(得分:0)

如果mac_add在表中有唯一索引或者它是主键,则可以使用INSERT .. ON DUPLICATE KEY UPDATE。

http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

答案 2 :(得分:0)

你的问题在这里

if(!rs.next())

javadocs :: ResultSet.next()返回: 如果新的当前行有效,则为true;如果没有更多行,则为false

将其更改为

 if(rs.next())