2016-08-23 85 views
0

在我的項目,我有很多的線程運行從網絡併發下載和插入/從MySQL數據庫中選擇。 我的數據庫管理器看起來是這樣的:JDBC:共享連接或使用連接池

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

連接池會更好,看看這個:http://stackoverflow.com/questions/2835090/how-to-establish-a-connection-pool-in-jdbc – neohope

回答

0

在我的軟件,連接池並沒有帶來了預期的成功,因爲我試圖將數據插入到不同的連接而導致死鎖相同的表。因此我保持實現了連接池,它爲1個表提供了1個連接。