- - PR -
con.setAutoCommit( false )について
1
| 投稿者 | 投稿内容 |
|---|---|
|
投稿日時: 2003-01-17 13:01
いつもお世話になっております。
下記コードのようにcon.setAutoCommit( false )に設定する場合は 下記コードのような場合でもcon.commit();としておいたほうがいいのでしょうか? class Test{ public vaid main(String args[]){ try{ // JDBCのインスタンスを生成 Class.forName( DRIVER ); // 接続し、auto commitotを無効にする。 Connection con = DriverManager.getConnection( URL, USER, PASSWORD ); con.setAutoCommit( false ); String sql="SELECT * FROM TESTTABLE"; PreparedStatement stmt = con.prepareStatement(sql); while( rs.next() ){ //省略 } rs.close(); stmt.close(); con.commit(); }catch(Exception e){ try{ con.rollback(); }catch(SQLException ex){ ex.printStackTrace(); } e.printStackTrace(); } finally{ try{ if (con != null) con.close(); }catch(SQLException ex){ ex.printStackTrace(); } con = null; } } } |
|
投稿日時: 2003-01-17 14:00
こんにちは。
ソースを拝見させていただいた限り、 SELECT文のみなので COMMIT処理は必要ないと思います。 COMMIT処理は 一連のトランザクションの 区切りをつけるために使用します。 たとえば、ユーザID+1をSELECTし、 管理テーブルのMAXユーザIDにユーザID+1をインサート そのユーザIDに関する情報をユーザテーブルにInsert。 つづく。。。 といった感じですかねtt |
|
投稿日時: 2003-01-17 14:23
なるほど。。。勉強になりました。ありがとうございます。
|
|
投稿日時: 2003-01-17 14:39
実はSELECTでも必要です。
厳密にはコネクションを取得したときにトランザクションが 発生していますので・・・ ドライバーで吸収しているものもありますが、 していないものもありますので注意してください。 コミットせずにクローズするとSQLExceptionを吐くやつがあります。 #個人的にはいちいちコミットさせるなって気もしますが。 |
|
投稿日時: 2003-01-17 15:40
こんにちわ。
個人的な考えでは、select文一つだけの発行 においても、処理グループの終わりでcommit 発行をするように癖をつけた方が良いような 気がします。 |
|
投稿日時: 2003-01-17 16:58
たくさのご返答ありがとうございました。
やはりcommitは発行したほうがいいのですね。 |
|
投稿日時: 2003-01-17 23:58
なるほど。。。
処理によるってことですね。 それに普段から癖づけたほうがいいってことですね!! すみません。 アドバイスしたつもりが 学のなさに混乱させてしまいました。。 |
1
