2016-08-23 18 views
0

私のプロジェクトでは、Webからの同時ダウンロードとMySQLデータベースへの挿入/選択のために、多くのスレッドが実行されています。 私のデータベース・マネージャーは次のようになります。100の+スレッドで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(); 
    } 
} 

、コールは例えば次のとおりです。

DatabaseManager.getInstance().getX(1, 1); 

または

DatabaseManager.getInstance().insert("INSERT INTO ..."); 

私の質問です:私は右の午前アプローチが1つの接続を共有しているか、たとえばプールに10個の接続を保持するなどの方が適していますか?

問題は、現在のソリューションで常にExecutionException(NullPointerException)が発生することです。

+0

接続プールが改善されます。これを確認してください。http://stackoverflow.com/questions/2835090/how-to-establish-a-connection-pool-in-jdbc – neohope

答えて

0

私のソフトウェアでは、デッドロックにつながる異なる接続から同じテーブルにデータを挿入しようとしたため、接続プーリングが正常に完了しませんでした。したがって、私は1つのテーブルに1つの接続を与える接続プーリングを実装していました。