私はUPSERT_DELETE_JOB_COUNTERSを更新しました。 今、私は "upsert"が新しいQuery =で動作すると思うか、それともあなたはどう思いますか?カラムインデックスが範囲外です:1、カラム数:0
に関して、 ピーター
`private static final String UPSERT_DELETE_JOB_COUNTERS =
"UPDATE rating.delete_job_counters SET delete_count = delete_count + ? WHERE fee_group_id = ? AND delete_job_id = ?; "+
"INSERT INTO rating.delete_job_counters(delete_job_id, fee_group_id, delete_count) "+
"SELECT ?, ? , ? " +
"WHERE NOT EXISTS (SELECT 1 FROM rating.delete_job_counters WHERE fee_group_id = ? AND delete_job_id = ?); ";
@Override
public Boolean insertIntoDeleteStatistic(final CachedRowSet deletedEntries,
Long deleteJobId,
Transaction transaction) throws SQLException {
boolean finish = true;
if (deletedEntries.size() == 0) {
return finish;
}
final Connection connection = transaction.getConnection();
final Timer executeTimer = Timer.start("Insert took ");
try {
PreparedStatement pstmt = connection.prepareStatement(UPSERT_DELETE_JOB_COUNTERS);
while (deletedEntries.next()) {
pstmt.setInt(1, deletedEntries.getInt(2));
pstmt.setInt(2, deletedEntries.getInt(1));
pstmt.setLong(3, deleteJobId);
pstmt.setLong(4, deleteJobId);
pstmt.setInt(5, deletedEntries.getInt(1));
pstmt.setInt(6, deletedEntries.getInt(2));
pstmt.setInt(7, deletedEntries.getInt(1));
pstmt.setInt(8, deletedEntries.getInt(2));
pstmt.execute();
}...
`
を私は 'deleteCdr.getIntは(2)'問題の原因であると信じています。このキャッシュされた結果セットには、実際には2つの列がありますか? –
あなたの問題に直接関係はありませんが、 'Statement'と' Connection'を閉じる必要があります。 [try-with-resources](https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html)を検討してください。 – bradimus
'UPDATE rating.delete_job_counters SET delete_count = delete_count +?どこのfee_group_id =? AND delete_job_id =?; INSERT INTO rating.delete_job_counters(delete_job_id、fee_group_id、delete_count) SELECT?、? 、? どこに存在しないのですか?(rating_level_job_countersからどれか1を選択してください?fee_group_id =?およびdelete_job_id =?); 'この質問はOKですか?私の最初のテストは肯定的でした。 – user3181885