JDBC:共享连接或使用连接池

时间:2016-08-23 00:37:28

标签: java mysql multithreading jdbc

在我的项目中,我有许多线程运行,用于从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 个答案:

答案 0 :(得分:0)

在我的软件中,连接池没有带来预期的成功,因为我试图将数据从不同的连接插入到相同的表中,从而导致死锁。因此,我保持实现连接池,为1个表提供1个连接。