-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())」は過去の記録に移動します。したがって、ここでは1行前から開始するため、値の重複を許可できます。

于 2012-12-21T12:01:15.903 に答える
0

あなたの問題はここにあります

if(!rs.next())

javadocs :: ResultSet.next()戻り値: 新しい現在の行が有効な場合はtrue。行がなくなった場合はfalse

に変更します

 if(rs.next())
于 2012-12-21T04:38:09.553 に答える
0

INSERT.. ON DUPLICATE KEY UPDATE を使用できるのは、mac_add がテーブルに一意のインデックスを持っている場合、または主キーである場合です。

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

于 2012-12-21T01:29:13.273 に答える