私はJDBCの初心者であり、私の研究では、すでにBoneCPを試したのでC3POに関する最高のレビューを見つけましたが、接続を閉じていないことがわかりました。
マルチスレッドソフトリアルタイムソフトウェア(トレーディングシステム)用の接続プール、おそらくステートメントプールも必要です
これは「SELECT」の例です。
- いいですか?
- getConn() を作成してからステートメントを作成し、クエリごとに両方を閉じる必要がありますか?
一般的なコメントや提案はありますか?
Connection conn = null; ResultSet rs = null; Statement st = null; String query = null; try { query = " SELECT id " + " FROM " + DBTables.PandaSources; //rs = DB.ConnPool.invoke(conn, query, rs); st = DB.ConnPool.getSt(); rs = st.executeQuery(query); if (rs != null) { while (rs.next()) { ..... ...... } } } catch (Exception e) { e.printStackTrace(); Util.logException(e); } finally { if (rs != null) try { rs.close(); } catch (SQLException e) { e.printStackTrace(); Util.logException(e); } if (st != null) try { st.close(); } catch (SQLException e) { e.printStackTrace(); Util.logException(e); } if (conn != null) try { conn.close(); } catch (SQLException e) { e.printStackTrace(); Util.logException(e); } } query = null; st = null; rs = null; conn = null; } public static synchronized Statement getSt() throws SQLException { return getConn().createStatement(); } public static synchronized Connection getConn() throws SQLException { if (connectionPoolDatasource == null) { initPool(); } return connectionPoolDatasource.getConnection();
}
public static synchronized void initPool() throws SQLException { DBLocation loc = null; try { loc = GTMain.DBConn.get(Util.DB_GURUSTRADE); // C3PO connectionPoolDatasource = new ComboPooledDataSource(); connectionPoolDatasource.setDriverClass(loc.driver); connectionPoolDatasource.setJdbcUrl(loc.url); connectionPoolDatasource.setUser(loc.user); connectionPoolDatasource.setPassword(loc.password); // properties connectionPoolDatasource.setAcquireIncrement(5); connectionPoolDatasource.setMaxIdleTime(3600); connectionPoolDatasource.setMaxIdleTimeExcessConnections(300); connectionPoolDatasource.setMaxPoolSize(100); connectionPoolDatasource.setMinPoolSize(20); connectionPoolDatasource.setNumHelperThreads(6); connectionPoolDatasource.setUnreturnedConnectionTimeout(3600); } catch (Exception e) { e.printStackTrace(); }
}