-1

我已经在 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 ..."       

         .....
         }

在我执行代码之后..在数据库中有重复的记录,好像它完全跳过了条件

4

3 回答 3

1

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

于 2012-12-21T12:01:15.903 回答
0

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

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

于 2012-12-21T01:29:13.273 回答
0

你的问题在这里

if(!rs.next())

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

将其更改为

 if(rs.next())
于 2012-12-21T04:38:09.553 回答