[英]JDBC: Share a connection or use connection pools
在我的項目中,我有許多線程正在運行,以便從Web並發下載並插入MySQL數據庫或從中進行選擇。 我的數據庫管理器如下所示:
private Connection conn;
private DatabaseManager() {
// Initialize conn
}
public static synchronized DatabaseManager getInstance() {
if (DatabaseManager.instance == null) {
DatabaseManager.instance = new DatabaseManager();
}
return DatabaseManager.instance;
}
public void deleteX() {
try {
Statement stmt = conn.createStatement();
String sql = //query
stmt.executeUpdate(sql);
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
public X getX(...) {
try {
Statement stmt = conn.createStatement();
ResultSet result= // Grab and do some thing
result.close();
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
public void insert(String query) {
try {
Statement stmt = conn.createStatement();
stmt.executeUpdate(query);
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
在100個以上的線程中,調用例如:
DatabaseManager.getInstance().getX(1, 1);
要么
DatabaseManager.getInstance().insert("INSERT INTO ...");
我的問題是:我是在共享單個連接的正確方法上使用還是在池中保留10個連接等更好的用法?
問題是,我當前的解決方案始終會得到一個ExecutionException(NullPointerException)。
在我的軟件中,連接池未達到預期的成功,原因是我試圖將數據從不同的連接插入同一表中,從而導致死鎖。 因此,我保留了實現的連接池,該連接池為1個表提供1個連接。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.