チケット #21380

PreparedStatement#setCharacterStrema(int, Reader, int)が想定どおりの動作をしない

登録: 2010-04-12 10:03 最終更新: 2010-04-15 19:29

報告者:
(匿名)
担当者:
(未割り当て)
チケットの種類:
状況:
オープン
コンポーネント:
(未割り当て)
マイルストーン:
(未割り当て)
優先度:
5 - 中
重要度:
5 - 中
解決法:
なし
ファイル:
なし

詳細

【発生バージョン】
Forest5.1.0

【概要】
PreparedStatement#setCharacterStrema(int, Reader, int)が想定どおりの動作をしない

【事象詳細】
PreparedStatement#setCharacterStrema(int, Reader, int)を使用した場合に、片方のDBのみに値がセットされ、もう片方のDBでは空文字となる。 (このサンプルでの実行時には前述の結果となったが、タイミングやReaderの実装の種類によっては不測の事態が発生することもありうる)

サンプルコード

stmt.execute("create table public.hoge(id int primary key, str text);");
PreparedStatement pstmt = con.prepareStatement("insert into public.hoge values (?,?);");
String str = "longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglong";
pstmt.setInt(1, 1);
Reader reader = new StringReader(str);
pstmt.setCharacterStream(2, reader, str.length());
pstmt.addBatch();
pstmt.executeBatch();

【対処方法】
setAscii/Binary/UnicodeStreamと同様に、ストリームをコピーする形の実装をすればよい。 (本来なら分岐ストリームオブジェクト的なものを作るべきだが、現時点で実装案が無いので上記方法で対処)

チケットの履歴 (6 件中 3 件表示)

2010-04-12 10:03 更新者: None
  • 新しいチケット "setCharacterStreamで値が抜ける" が作成されました
2010-04-14 10:19 更新者: nagatyo
  • 概要が更新されました
  • 詳細が更新されました
2010-04-14 10:20 更新者: nagatyo
  • 概要が更新されました
  • 詳細が更新されました
2010-04-14 10:25 更新者: nagatyo
コメント

バグ報告をしてくださった方に質問ですが・・・

「ストリームなど」となっていますが、setCharacterStream以外にも同様の事象を発見しているのでしょうか?現時点で軽くソースを見た限りにおいては、setCharacterStreamだけかと思っているので、この関数に限定した不具合としてチケットを変更しておきました。もしほかの関数も該当しているということであれば教えていただけると助かります。

2010-04-14 15:58 更新者: None
コメント

nagatyo への返信

バグ報告をしてくださった方に質問ですが・・・

こちらで動作確認しているのは、setCharacterStreamだけです。

報告後に、他のStreamを使用している関数はコピーしたものを使用していることをコード上で確認していました・・・

コードを見直したところ、setClob、setBlobあたりも直接参照されているようですが、こちらで動作させるコードがなかったので、どのように動作するかは、 未確認となります。おそらく、各Lobおよび、JDBCの内部実装に依存していると推測されるくらいです。

あと、発生バージョン等、情報不足の上、あいまいな記載をして済みませんでした。追記ありがとうございます。

2010-04-15 19:29 更新者: nagatyo
コメント

None への返信

コードを見直したところ、setClob、setBlobあたりも直接参照されているようですが、こちらで動作させるコードがなかったので、どのように動作するかは、 未確認となります。おそらく、各Lobおよび、JDBCの内部実装に依存していると推測されるくらいです。

コードを見る限り、setB/Clobあたりも問題が発生しそうに見えます。 (今試せる状況に無いですがそのうち試してみます) LOB系は対処がちょっと厄介そうだなぁ・・・。

あと、発生バージョン等、情報不足の上、あいまいな記載をして済みませんでした。追記ありがとうございます。

あれだけしっかり内容が書かれていれば十分だと思います。ありがとうございます。

添付ファイルリスト

添付ファイルはありません

編集

ログインしていません。ログインしていない状態では、コメントに記載者の記録が残りません。 » ログインする