私はいくつかのSQLクエリを実行するためにjavaを使用しています。それらの中には、あるデータベース(A)からデータを取得し、別のデータベース(B)のテーブルに格納することがあります。プロセスが完了したら、データベース(B)のテーブルからすべてのデータを削除します。私はこのプロセスを5分ごとに繰り返す。 コード:クエリでdistinctキーワードを使用している重複エントリwhice
String sql = "delete from newtable";
stmt5 = conn.prepareStatement(sql);
stmt5.executeUpdate(sql);
String sql_1 = "select distinct tbl_alm_log_2000000000.Csn, tbl_alm_log_2000000000.IsCleared, tbl_alm_log_2000000000.Id,tbl_alm_log_2000000000.NEType, tbl_alm_log_2000000000.OccurTime, tbl_alm_log_2000000000.hostIP, tbl_alm_log_2000000000.ExtendInfo From fmdb.dbo.tbl_alm_log_2000000000 Where IsCleared = 0";
ResultSet rs = stmt_1.executeQuery(sql_1);
String sql_2 = "insert into newtable (CSN, IsCleared, Id, NEType, OccurTime, hostIP) values(?,?,?,?,?,?)";
conn.setAutoCommit(false);
PreparedStatement ps = conn.prepareStatement(sql_2);
final int batchSize = 1000;
int count = 0;
while (rs.next()){
ps.setString(1, rs.getString(1)); //csn
ps.setString(2, rs.getString(2)); //iscleared
ps.setString(3, rs.getString(3));//id
ps.setString(4, rs.getString(4));//netype
ps.setString(5, rs.getString(5));//occurtime
ps.setString(6, rs.getString(6));//hostip
ps.addBatch();
if(++count % batchSize == 0) {
ps.executeBatch();
}
}
ps.executeBatch(); // insert remaining records
conn.commit();
ps.close();
それは10の-20の実行のために完璧に実行され、その後、「それが主キーであるようCsnの中に 『値』のための重複入力エラー」を与えます。 クエリでDistinctキーワードを追加しましたが、10〜20回実行してもこのエラーが発生します。
注:新しいテーブルからデータを削除すると、プロセスが開始されるため、常に空のテーブルに追加されます。
私はどこが間違っているのかを提案します。
チェック。このフィールドは 'insert'で使われていません。あなたがそれを必要としない場合。そのフィールドを 'select'から削除します。 – Viki888
互換性のないデータベースタグを削除しました。実際に使用しているデータベースにタグを付けてください。 –
@ viki888それは使用されていますが、私はそれがこの問題に関係しないと思ったので、私はその部分を削除しました。私はそれを戻すべきか? –