我正在減少死鎖,並指出我不應該對一個連接使用多個查詢,因爲事務可能未提交併打開,從而導致死鎖。因此,在僞代碼,是這樣的:JDBC什麼時候自動提交提交
try(Connection con = datasource.getConnection())
{
PreparedStatement stm1 = con.prepareStatement(getSQL());
stm1.setString(1, owner);
stm1.setTimestamp(2, Timestamp.valueOf(LocalDateTime.now()));
stm1.setInt(3, count);
int updateCount = stm1.executeUpdate();
stm1.close();
PreparedStatement stm2 = con.prepareStatement(getSQL2());
stm2.setString(1, owner);
ResultSet rs = stm2.executeQuery();
List<Object> results = new ArrayList<>();
while(rs.next()) {
results.add(create(rs));
}
return results;
} catch (SQLException e) {
throw new RuntimeException("Failed to claim message",e);
}
時自動提交設置爲true什麼時候STM1提交事務?
重複使用這樣的連接還是兩個語句應該使用單獨的連接而不是好的做法?
第一條語句在調用'stm1.executeUpdate();'時立即提交。 – Kayaman
我會努力重新使用連接,因爲打開連接有開銷。如果你連接sql1和sql2,你也可以只做一個調用。 –
Sql 1是一個更新,而2是一個選擇取決於該更新。 Sql1導致一個死鎖與不同的更新,這就是爲什麼我想知道如果sql2持有一個事務打開太久導致死鎖。無論如何,它們不能用1個查詢來表示 – pandaadb