在我的项目中,我有许多线程运行,用于从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)。
答案 0 :(得分:0)
在我的软件中,连接池没有带来预期的成功,因为我试图将数据从不同的连接插入到相同的表中,从而导致死锁。因此,我保持实现连接池,为1个表提供1个连接。