私は常にシングルスレッド環境のJavaSEでJDBCを使用していました。しかし、今は接続プールを使用して、多くのスレッドがデータベース(MSSQLおよびOracle)と対話できるようにする必要があり、APIの基本的な理解が不足しているように見えるため、接続プールを作成するのに苦労しています。
接続してログに記録した後のAFAIKConnection
は、データベースへの物理的なtcp/ip接続を表します。これはStatement
、を介したデータベースとのSQLインタラクションと見なすことができる(s)を作成しますConnection
。
- トランザクションとロールバックはどこで発生しますか?
Connection
またはStatement
レベルですか。 - 'one'
Connection
がN個のステートメントを作成し、それを異なるスレッドに渡して、それぞれがその使用を所有できるようにするのは安全Statement
ですか?
そうでない場合、およびプールを構成した後、次のようになります。
OracleDataSource ods = new OracleDataSource();
ods.setURL("jdbc:oracle:thin:@tnsentryname");
ods.setUser("u");
ods.setPassword("p");
ところで、接続プールのサイズはどこで設定できますか?
これは、接続を正しく使用するために各スレッドで行うことですか?
//theadrunメソッド
Connection conn = ods.getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("the sql");
// do what I need to do with rs
rs.close();
int updateStatus = stmt.executeUpdate("the update");
stmt.close();
conn.close();
//スレッド実行メソッドの終了
- プールの物理的な接続が何らかの理由でクラッシュまたは切断された場合、プールは自動的に再接続を試み、プールに新しい接続を挿入して、後続のpool.getConnection()が正常な接続を取得するようにしますか?
どうもありがとう、私の悪い英語を許してください。