- PR -

con.setAutoCommit( false )について

1
投稿者投稿内容
TAKA
会議室デビュー日: 2002/06/20
投稿数: 17
投稿日時: 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;
}
}
}
raystar
ぬし
会議室デビュー日: 2003/01/16
投稿数: 251
お住まい・勤務地: Tokyo/Japan
投稿日時: 2003-01-17 14:00
こんにちは。
ソースを拝見させていただいた限り、
SELECT文のみなので
COMMIT処理は必要ないと思います。

COMMIT処理は
一連のトランザクションの
区切りをつけるために使用します。

たとえば、ユーザID+1をSELECTし、
管理テーブルのMAXユーザIDにユーザID+1をインサート
そのユーザIDに関する情報をユーザテーブルにInsert。
つづく。。。

といった感じですかねtt
TAKA
会議室デビュー日: 2002/06/20
投稿数: 17
投稿日時: 2003-01-17 14:23
なるほど。。。勉強になりました。ありがとうございます。
pon
常連さん
会議室デビュー日: 2002/05/21
投稿数: 43
投稿日時: 2003-01-17 14:39
実はSELECTでも必要です。
厳密にはコネクションを取得したときにトランザクションが
発生していますので・・・
ドライバーで吸収しているものもありますが、
していないものもありますので注意してください。
コミットせずにクローズするとSQLExceptionを吐くやつがあります。

#個人的にはいちいちコミットさせるなって気もしますが。
(株)ぽち
ぬし
会議室デビュー日: 2002/09/10
投稿数: 376
投稿日時: 2003-01-17 15:40
こんにちわ。

個人的な考えでは、select文一つだけの発行
においても、処理グループの終わりでcommit
発行をするように癖をつけた方が良いような
気がします。
TAKA
会議室デビュー日: 2002/06/20
投稿数: 17
投稿日時: 2003-01-17 16:58
たくさのご返答ありがとうございました。
やはりcommitは発行したほうがいいのですね。
raystar
ぬし
会議室デビュー日: 2003/01/16
投稿数: 251
お住まい・勤務地: Tokyo/Japan
投稿日時: 2003-01-17 23:58
なるほど。。。
処理によるってことですね。
それに普段から癖づけたほうがいいってことですね!!
すみません。
アドバイスしたつもりが
学のなさに混乱させてしまいました。。
1

スキルアップ/キャリアアップ(JOB@IT)