- PR -

JDBC接続方法違いでエラーとなる。

投稿者投稿内容
tabby
ベテラン
会議室デビュー日: 2002/06/26
投稿数: 55
お住まい・勤務地: 埼玉県・東京都
投稿日時: 2003-09-08 21:59
DBCPが返してくる ResultSet が OracleResultSet ではなく DelegatingResultSet に
なっているのが問題でしょう。その場合、 DelegatingResultSet から本来の ResultSet を
もらえばいいのですが、このメソッドがDBCP 2.0からしかなかったり…

とりあえず、Struts 1.1 rc1 のアーカイブに入っている commons-dbcp.jar で試せると思います。
もしくは ソースを落としてきて DelegatingResultSet.java にメソッドを追加しましょう。

コード:

public ResultSet getDelegate() {
  return _res;
}



で、それを使って書けばこんな感じでいけると思います。

BLOB blob = ((OracleResultSet)((DelegatingResultSet)rs).getDelegate()).getBLOB("blob_col");
taku
ぬし
会議室デビュー日: 2002/11/12
投稿数: 918
お住まい・勤務地: 墨田区→中野区
投稿日時: 2003-09-09 10:00
引用:

javanさんの書き込み (2003-09-08 21:38) より:
だださんの書き込みより
引用:
だとするとまず、Blobを使用する場合は、PreparedStatementを使う必要があります。


PreparedStatementでなければならない訳ではないですよ。
java.sql.Statementでもよいはずです。

Blob以外のDB操作はデータソースの使用でもないのですよね?

[ メッセージ編集済み 編集者: javan 編集日時 2003-09-08 21:39 ]


そうですね、静的ステートメントでもOKのはずです。
セットするときなら動的ステートメントを使用すると思いますけど。
それとも、もしかしたらセットも静的ステートメントでもOK?

昔、DB2でやったときはそんなに苦労しなかった気が・・・。
S38
会議室デビュー日: 2003/07/07
投稿数: 10
投稿日時: 2003-09-09 11:24
みなさんご支援ありがとうございます。
引用:

tabbyさんの書き込み (2003-09-08 21:59) より:
DBCPが返してくる ResultSet が OracleResultSet ではなく DelegatingResultSet に
なっているのが問題でしょう。その場合、 DelegatingResultSet から本来の ResultSet を
もらえばいいのですが、このメソッドがDBCP 2.0からしかなかったり…

とりあえず、Struts 1.1 rc1 のアーカイブに入っている commons-dbcp.jar で試せると思います。
もしくは ソースを落としてきて DelegatingResultSet.java にメソッドを追加しましょう。
コード:

public ResultSet getDelegate() {
  return _res;
}



で、それを使って書けばこんな感じでいけると思います。
BLOB blob = ((OracleResultSet)((DelegatingResultSet)rs).getDelegate()).getBLOB("blob_col");


やることは分かりましたが・・・
ソースを落としてきて DelegatingResultSet.java にメソッドを追加する方法がわかりません。
commons-dbcp.jarの存在は確認しています。
ソースを落とす?
大変申し訳ございませんが、
JAVA初心者の為、そこのところ、ご教授お願いできないでしょか。

【開発環境】
struts1.1
eclipse2.1.1
tomcat4.1.24
S38
会議室デビュー日: 2003/07/07
投稿数: 10
投稿日時: 2003-09-09 14:50
S38です。苦戦しております。
なんとか、ソースを落として、DelegatingResultSet.java に
メソッドを組み込むところまできました。

それで、tabbyさんの書き込みの以下の処理を実行したところ
BLOB blob = ((OracleResultSet)((DelegatingResultSet)resultset).getDelegate()).getBLOB("blob_col");
やはり、ClassCastExceptionとなってしまいます。

処理を分解して以下のように実行してみました。
1)Dres = (DelegatingResultSet)resultset;
2)resultset = Dres.getDelegate();
3)BLOB blob = ((OracleResultSet)resultset).getBLOB("blob_col");

2)の実行結果内容をデバックにて確認すると、確かに
resultset=OracleResultSetImplとなりましたが、
3)を実行するとClassCastExceptionになってしまいます。
すみませんが、引き続きよろしくお願い致します。
S38
会議室デビュー日: 2003/07/07
投稿数: 10
投稿日時: 2003-09-16 17:39
みなさん御支援ありがとうございました。
S38です。自己レスです。
ClassCastExceptionから脱出できませんでした。
JAVA初心者の私にとって今回の件につきましては
データソースを活用した接続につきましては、
今時点であきらめさせて頂きました。ショボ〜ン
お騒がせして、どうもすいませんでした。
とりあえず、class.forNameクラス接続する方法で
逃げさせて頂きます。
何か分かりましたら、再度投稿させて頂きます。

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