- PR -

OracleのJDBCドライバ読み込みエラー

1
投稿者投稿内容
yuki
会議室デビュー日: 2005/06/08
投稿数: 11
投稿日時: 2005-06-09 16:07
JAVAを始めたばかりの初心者です。

OracleのDB(テーブル名:JAVA)からデータを全件取得して、
サーブレットでHTML化してブラウザに表示する
というプログラムを作成しています。

Eclipseにtomcatをプラグインして実行しています。
<実行環境>
Windows2000SP4
Eclipse 2.1.1
Tomcat 5.0.28
Tomcatプラグイン version 3.0.0
Oracle92

こちらのプログラムではうまくデータを表示
(コンソールに)させることができました。

<ソース>
public class OrAccessServlet {
public static void main (String args[])
throws SQLException, ClassNotFoundException {

// Oracle JDBC Driverのロード
Class.forName("oracle.jdbc.driver.OracleDriver");
// Oracle8iに接続
Connection conn = DriverManager.getConnection
("jdbc:oracle:thin:@192.168.200.48:1521:sjc920", "SYS_PRACTICE", "SYS_PRACTICE");

// ステートメントを作成
Statement stmt = conn.createStatement();

// 問合せの実行
ResultSet rset = stmt.executeQuery("SELECT * FROM JAVA");

// 問合せ結果の表示
while ( rset.next() ) {
// 列番号による指定
System.out.println(rset.getInt(1) + "\t" + rset.getString(2) + "\t" + rset.getString(3));
}

// 結果セットをクローズ
rset.close();

// ステートメントをクローズ
stmt.close();

// 接続をクローズ
conn.close();


}
}

しかし、こちらのサーブレットプログラムでブラウザに表示しようとすると、

java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver

というエラーがコンソールに表示され、
JDBCドライバをロードしてくれません。

<ソース>
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;

public class OrAccessServlet extends HttpServlet {

public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException {

req.setCharacterEncoding("Shift_JIS");
res.setContentType("text/html;charset=Shift_JIS");


// HTML ヘッダ出力
PrintWriter rw = res.getWriter();
rw.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\">");
rw.println("<HTML>");
rw.println("<HEAD>");
rw.println("<META http-equiv=\"Content-Type\" content=\"text/html; charset=Shift_JIS\">");
rw.println("<TITLE>テスト</TITLE>");
rw.println("</HEAD>");
rw.println("<BODY>");
rw.println("<P>JAVA Servlet - Oracle9i JDBC Test</P>");

try {

// Oracle9i JDBC ドライバロード
     Class.forName("oracle.jdbc.driver.OracleDriver");
// Oracle9i JDBC 接続
String dsn = "jdbc:oracle:thin:@192.168.200.48:1521:sjc920";
Connection cn = DriverManager.getConnection(dsn, "SYS_PRACTICE", "SYS_PRACTICE");

// Oracle9i JDBC 問い合わせ SQL 作成
String sql = "SELECT * FROM JAVA";
Statement st = cn.createStatement();

// Oracle9i JDBC レコードセットオープン
ResultSet rs = st.executeQuery(sql);

// Oracle9i JDBC レコードセットリード
while (rs.next()) {
rw.println("<P>" + rs.getString(1) + rs.getString(2) + rs.getString(3) + "</P>");

System.out.println(rs.getString(1) + "\t" + rs.getString(2) + "\t" + rs.getString(3));

}

// Oracle9i JDBC レコードセットクローズ
rs.close();

// Oracle9i JDBC ステートメントクローズ
st.close();

// Oracle9i JDBC 接続クローズ
cn.close();

}
catch (Exception e) {

// エラー処理
rw.println("<P>error</P>");

System.out.print(e.toString());

}

// HTML テイル出力
rw.println("</BODY>");
rw.println("</HTML>");
}
}


クラスパスにOracleのJDBC(classes12.jar,clsses12_g.jar,
classes12dms.jar,classes12dms_g.jar,ocrs12.jar)を追加してあるので、
なぜ java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver
というエラーが出るのか分かりません。
サーブレットにした時だけうまくいきません。

長文になってしまい大変申し訳ありませんが、
解決方法をご存知の方がいらっしゃいましたら
ご教授宜しくお願い致します。
ハツキタツミ
大ベテラン
会議室デビュー日: 2005/05/24
投稿数: 108
投稿日時: 2005-06-09 17:15
OracleのJDBCドライバを
$CATALINA_HOME/common/lib
あたりに設置すると動きませんか?

Tomcatで動かすのであれば、参照するクラスパスは環境変数に設定したのとは別ですよ..(多分ですが..)
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2005-06-09 20:11
$CATALINA_HOME/common/libに配置するのは、
TomcatのJNDI経由でConnectionを取得する時です。
Servletから直接使用する場合は、WEB-INF/libに配置してください。
yuki
会議室デビュー日: 2005/06/08
投稿数: 11
投稿日時: 2005-06-10 10:30
かつのりさん、ハツキタツミさん、
ご返答ありがとうございます。

お二人のご指摘の通り、
JDBCの配置の場所が間違っていたことが原因でした。
パスをOracle_HOMEの中にあるJDBCのままにしていました。

WEB-INF/libに配置したところ、サーブレットで
うまく表示することが出来ました。

ご教授くださってありがとうございました。
1

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