【发布时间】:2016-08-02 12:40:20
【问题描述】:
我更新了 UPSERT_DELETE_JOB_COUNTERS。 现在我认为“upsert”适用于新的查询 =) 或者你怎么看?
问候, 彼得
`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)是问题的原因。你确定这个缓存的结果集实际上有两列可用吗? -
与您的问题没有直接关系,但您需要关闭
Statement和Connection。考虑try-with-resources。 -
` 更新 rating.delete_job_counters SET delete_count = delete_count + ?在哪里 fee_group_id = ?和 delete_job_id = ?;插入到 rating.delete_job_counters(delete_job_id, fee_group_id, delete_count) SELECT ?, ? , ?不存在的地方(从 rating.delete_job_counters 中选择 1,其中 fee_group_id = ?和 delete_job_id = ?); ` 这个查询好吗?我的第一次测试是阳性的。
标签: java postgresql jdbc postgresql-9.4 cachedrowset