架構上使用多線程處理JDBC的最佳方式是什麼?我有許多線程同時訪問數據庫。通過單個連接和聲明,我收到以下錯誤消息:多線程JDBC
org.postgresql.util.PSQLException:此ResultSet已關閉。
我應該使用多個連接,多個語句還是有更好的方法?我的初步想法是每個線程使用一個語句來保證每個語句只有一個結果集。
架構上使用多線程處理JDBC的最佳方式是什麼?我有許多線程同時訪問數據庫。通過單個連接和聲明,我收到以下錯誤消息:多線程JDBC
org.postgresql.util.PSQLException:此ResultSet已關閉。
我應該使用多個連接,多個語句還是有更好的方法?我的初步想法是每個線程使用一個語句來保證每個語句只有一個結果集。
您應該爲每個任務使用一個連接。如果使用連接池,則不能使用由其他連接準備的預準備語句。由連接創建的所有對象(ResultSet,PreparedStatements)在連接返回到池後都無效。
所以,這是一樣
public void getSomeData() {
Connection conn = datasource.getConnection();
PreparedStatement st;
try {
st = conn.prepareStatement(...);
st.execute();
} finally {
close(st);
close(conn);
}
}
因此,在這種情況下,所有你的DAO對象採取不連接,但數據源對象(java.sql.DataSource),這是池化連接工廠確實如此。在每一種方法中,你首先得到連接,做所有的工作並且關閉連接。你應該儘可能快地返回連接池。連接返回後,它可能沒有物理關閉,但重新初始化(所有活動事務關閉,所有會話變量銷燬等)
是的,使用連接池的多個連接。打開連接的時間足夠長,以滿足需要,然後在完成後立即關閉連接。讓連接池負責「物理」連接管理以提高效率。