簡體   English   中英

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

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM