カテゴリ:プラグイン障害・課題・制限
昨日のOracleのLong型データが取得できないという件ですが、
ようやく原因が分かりました!! 日本のサイトでは見つからなかったのですが、海外では 「Oracle Stream already closed. Long」で検索(by Google)していみると 以下の記事を見つけました。 Mailing list archives この人曰く、OracleのJDBCDriverのバグだろう。ということです。 実際に、DBViewerPluginに色々とテストコードを入れて 試してみたところ、やっと問題の箇所が特定できました。 ■問題の箇所 1.Long型のあるテーブルにSELECT文を発行する。 rs = stmt.executeQuery(SELECT文) 2.while(rs.next()) する前に、使用中のConnectionのDatabaseMetaDataデータからPrimaryKey情報を取り出す DatabaseMetaData#getPrimaryKeysを検索する rs = objMet.getPrimaryKeys(null, schemaPattern, tableName); while (rs.next()) { TablePKColumn column = new TablePKColumn(); column.setSep(rs.getInt("KEY_SEQ")); column.setColumnName(rs.getString("COLUMN_NAME")); column.setName(rs.getString("PK_NAME")); list.add(column); } ※補足:ここでのrsと「1.」にあるrsは別のオブジェクトです 3.PrimaryKeyを取得した後に、「1」で検索した結果をwhile(rs.next()) すると 「ストリームはすでにクローズ済です。」というSQLExceptionが発生する ■問題回避方法 その1:getPrimaryKeysを取得するときのConnectionは別にする その2:executeQueryを発行する前に、getPrimaryKeysを実行する Connectionは極力使いまわした方が、レスポンスが良いため、 その2の方法で対応したいと思います。 ■補足情報 Long型のデータに対して2回以上getString()などを発行しても 同じExceptionが発生することがわかりました。 お気に入りの記事を「いいね!」で応援しよう
Last updated
2005.12.11 16:19:47
コメント(0) | コメントを書く
[プラグイン障害・課題・制限] カテゴリの最新記事
|
|