質問: 少し前に、「OracleでBLOB型の項目にデータを登録したい。」の質問をしたものです。 あまりに色々試しすぎて自分でもよくわからなくなってきてしまったため、一度自分の中で整理も含め、改めて質問をさせてもらいました。 状況としましては、この度JDK1.4からJDK6にバージョンを上げましたところ、BLOB型のデータをSQLより取得している部分が一部コンパイルエラーとなってしまい悩んでいます。 環境 apache2、tomcat6、JDK6、oracle9、JDBCドライバ(commons-dbcp-1.2.1.jar)を使用。 エラー箇所 SQL文を実行し、resultSetよりBLOB型のデータを取り出す部分 ((OracleResultSet)((DelegatingResultSet)resultSet).getDelegate()).getBLOB("AM") JDK1.4では使用できた、oracle.jdbc.driver.OracleResultSetが使えなくなったためコンパイルエラーが起きています。 JDK6の場合は、どのように取得すればいいのでしょうか。 java.sql.Blobを使用し、(Blob)(resultSet.getBlob("AM"))で普通に取得できるというアドバイスもいただきましたが、 java.lang.AbstractMethodError: oracle.jdbc.driver.OracleResultSetImpl.getBlob(Ljava/lang/String;)Ljava/sql/Blob; が表示され見つからないと言われてしまいました。 Javadocを調べたところ、JDK6の場合はjava.sql.Blobが使用できるみたいなんですが... コンパイルも通ってます。 どこが悪いのか... こういうこと試してみたら?とか、ここ間違っているよという方がいらっしゃいましたら、よろしくお願いします。
回答: ちょっと以前のやりとりを、ゆっくり読み返す時間も取れないので、 変な事言っちゃうかもしれませんが。 OracleのJDBCドライバであるojdbcなんちゃら.jarが、 プロジェクトのプロパティの、ビルドパスに指定されているか、 確認してみてください。 通常、WEB-INF/lib/に入っているjarは、コンパイル時にも実行時にも Webアプリケーションから参照できます. (WEB-INF/libの中のjarは、自動でビルドパスに含まれる) しかし、JDBCドライバは、Webアプリだけではなく、Tomcatが必要としているので、 WEB-INF/libではなく、$CATALINA_HOME/common/lib/の方に入れます。 その場合、自動ではビルドパスに含まれないので、 コンパイルする為には、手動でビルドパスに追加してあげる必要があります。 詳しくは、Tomcatのクラスローダーについて調べてみて下さい。