- PR -

ResultSetの使い方について

投稿者投稿内容
想馬
大ベテラン
会議室デビュー日: 2003/05/29
投稿数: 245
お住まい・勤務地: 神奈川・東京
投稿日時: 2006-11-28 15:22
引用:

くりさんの書き込み (2006-11-28 15:06) より:
Operation not allowed after ResultSet closed、というエラーがですが、
ソースは想馬さんと同じにしたのですが、
ResultSetが閉じた後には認められない操作


1つのStatementオブジェクトに対し1つのResultSetオブジェクトだけがオープンされるので自分が書いたサンプルだと当然の動作ですね、変なサンプルコードを書いてすみませんでした。
くり
常連さん
会議室デビュー日: 2006/10/30
投稿数: 28
お住まい・勤務地: tokyo
投稿日時: 2006-11-28 16:34
>>1つのStatementオブジェクトに対し1つのResultSetオブジェクトだけがオープンされるので

想馬さんすみません。私も概要を完全に理解しているわけではないのですが
この場合、Statementオブジェクトをもうひとつ作るということですか?
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2006-11-28 16:44
引用:

くりさんの書き込み (2006-11-28 16:34) より:
>>1つのStatementオブジェクトに対し1つのResultSetオブジェクトだけがオープンされるので

想馬さんすみません。私も概要を完全に理解しているわけではないのですが
この場合、Statementオブジェクトをもうひとつ作るということですか?



ドキュメントも読みましょうね。
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/sql/Statement.html
引用:

デフォルトでは、Statement オブジェクトごとに 1 つの ResultSet オブジェクトだけが同時にオープンできます。



別個のStatementオブジェクトを作る必要がありますね。

# こういうのは実際に試行するのが早いとおもうのだけど…
くり
常連さん
会議室デビュー日: 2006/10/30
投稿数: 28
お住まい・勤務地: tokyo
投稿日時: 2006-11-28 18:43
nagiseさん、想馬さん
ありがとうございます。
無事できました。
nagiseさん丁寧にありがとうございます。
>>ドキュメントも読みましょうね。
すみません。気を付けます。
小僧
ぬし
会議室デビュー日: 2002/08/14
投稿数: 526
投稿日時: 2006-11-28 19:07
コード:

finalyは使ってませんが
try{
if(rs != null){
rs.close();
}

if(st != null){
st.close();
}
if(conn != null){
conn.close();
}
}catch(SQLException e){}
を使用してます。



この書き方ですと、くりさんはC言語の知識をお持ちだと思うのですが、
DBに限らず、I/O処理では必ずfinallyブロックで後始末をするように
しましょう。異常な状態を示すシグナルが飛んできて、それを捕捉する
方法としてtry〜catch〜finallyブロックが存在するので、Javaでこれ
を使わないのは、故意にプログラムの質を下げていることになってしま
います。nullによるクローズ判定自体は間違っていないので、どうぞ
finallyブロックに移動してあげてください。


[ メッセージ編集済み 編集者: 小僧 編集日時 2006-11-28 19:08 ]
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2006-11-28 23:19
細かい突っ込みですが、
コード:
try{
if(rs != null){
rs.close();
}

if(st != null){
st.close();
}
if(conn != null){
conn.close();
}
}catch(SQLException e){}


rs.close()で例外が発生するとconnとstのクローズが行えなくなります。
st.close()も同様です。

終了処理で発生する例外は握りつぶすというのもありですが、
極力握りつぶさずに、ログ出力などを行うといいと思います。
小僧
ぬし
会議室デビュー日: 2002/08/14
投稿数: 526
投稿日時: 2006-11-29 11:04
コード:

if(st != null){
try{
st.close();
}catch(Exception e){
//ログ出力
}
}
.
.
.



コード足らずでしたね、失礼 


[ メッセージ編集済み 編集者: 小僧 編集日時 2006-11-29 11:09 ]

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