Ich habe die UPSERT_DELETE_JOB_COUNTERS aktualisiert. Jetzt denke ich, dass die "upsert" mit der neuen Query funktioniert =) Oder was denkst du?Der Spaltenindex liegt außerhalb des Bereichs: 1, Anzahl der Spalten: 0
Grüßen, Peter
`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();
}...
`
Ich glaube, dass 'deleteCdr.getInt (2)' ist die Ursache des Problems . Sind Sie sicher, dass dieses zwischengespeicherte Ergebnis tatsächlich zwei Spalten enthält? –
Nicht direkt mit Ihrem Problem verbunden, aber Sie müssen Statement und Connection schließen. Ziehen Sie [try-with-resources] (https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html) in Betracht. – bradimus
'UPDATE rating.delete_job_counters SET delete_count = delete_count +? WHERE Gebühr_Gruppen_ID =? UND delete_job_id =?; INSERT in rating.delete_job_counters (delete_job_id, fee_group_id, delete_count) SELECT?,? ,? WHERE NICHT EXISTIERT (SELECT 1 VON rating.delete_job_counters WHERE fee_group_id =? UND delete_job_id =?); 'Ist diese Frage Ok? Mein erster Test war positiv. – user3181885