[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 : [E-MAIL ADDRESS DELETED]
/--------------------------------/
-------------- 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 メーリングリストの案内