[Seasar-user:1105] SQLServerでの同一列への再読み込み時エラー

Hisayoshi Sasaki sasaki
2004年 10月 8日 (金) 23:14:09 JST


比嘉さん

はじめまして。ROM派のグルージェント.佐々木と申します。

現在、DBにSQLServerを使用しての開発にS2DAOを利用させていただいて
います。
そこで下記の不具合が起きてしまいました。
SQLServer(driver?)の不具合なのですが、S2DAOで対応していただけると
助かります。

ResultSetから2回同じ列を読みにいった際に例外が発生するケースが
あります。原因は不明なのですが、ResultSet.getValueで起こります。
抜粋したエラーメッセージを以下に示します。
--------------------------------------------------------------
Caused by: java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for 
JDBC]ResultSet では、列 4 の行データを再度読み込むことができません。
 at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source)
 at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
 at com.microsoft.jdbc.base.BaseResultSet.validateColumnIndex(Unknown 
Source)
 at com.microsoft.jdbc.base.BaseResultSet.getString(Unknown Source)
 at com.microsoft.jdbc.base.BaseResultSet.getString(Unknown Source)
 at org.seasar.extension.jdbc.types.StringType.getValue(StringType.java:30)

--------------------------------------------------------------

この問題を回避するため、リレーション情報を保持して1度取得している場合は
ResultSetからは読み込まないように対応しました。
具体的には参照キーと値を入れたMapを、
AbstractBeanMetaDataResultSetHandler.createRelationRowにパラメータとして
追加して対処しました。
レアケースの上、特定のJDBCドライバの問題に関わる内容ですが、処置としては
特殊なコードにならないよう、既知の情報はキャッシュして利用するという形で
まとめるようにしてS2DAOにたいして違和感のないよう気をつけました。

添付のものが、そのパッチソースになります。

修正箇所には"by Sasaki"というコメントを入れていますのでご確認の上
S2DAOへの反映をご検討ください。

よろしくお願いします。

/--------------------------------/
 株式会社 グルージェント   開発部
  佐々木 久禎(Hisayoshi Sasaki)
  Tel  : 03-5469-8869
  Fax : 03-5469-8879
  mailto : sasaki @ gluegent.com
/--------------------------------/ 
-------------- next part --------------
テキスト形式以外の添付ファイルを除去しました...
ファイル名: AbstractBeanMetaDataResultSetHandler.java
型:         java/*
サイズ:     2787 バイト
説明:       無し
URL:        http://lists.sourceforge.jp/mailman/archives/seasar-user/attachments/20041008/c8a8e76c/AbstractBeanMetaDataResultSetHandler.bin
-------------- next part --------------
テキスト形式以外の添付ファイルを除去しました...
ファイル名: BeanListMetaDataResultSetHandler.java
型:         java/*
サイズ:     2955 バイト
説明:       無し
URL:        http://lists.sourceforge.jp/mailman/archives/seasar-user/attachments/20041008/c8a8e76c/BeanListMetaDataResultSetHandler.bin


Seasar-user メーリングリストの案内