- - PR -
OracleのJDBCドライバ読み込みエラー
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 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-06-09 17:15
OracleのJDBCドライバを
$CATALINA_HOME/common/lib あたりに設置すると動きませんか? Tomcatで動かすのであれば、参照するクラスパスは環境変数に設定したのとは別ですよ..(多分ですが..) |
|
投稿日時: 2005-06-09 20:11
$CATALINA_HOME/common/libに配置するのは、
TomcatのJNDI経由でConnectionを取得する時です。 Servletから直接使用する場合は、WEB-INF/libに配置してください。 |
|
投稿日時: 2005-06-10 10:30
かつのりさん、ハツキタツミさん、
ご返答ありがとうございます。 お二人のご指摘の通り、 JDBCの配置の場所が間違っていたことが原因でした。 パスをOracle_HOMEの中にあるJDBCのままにしていました。 WEB-INF/libに配置したところ、サーブレットで うまく表示することが出来ました。 ご教授くださってありがとうございました。 |
1