- - PR -
JDBCドライバ使用するPG実行エラー
| 投稿者 | 投稿内容 | ||||||||
|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-06-22 15:48
いつもお世話になります、JAVA初心者です。
JDBCを使ってDBに接続するPGを実行したところ、下記エラーが出ました。 どうもClass.forNameのところでエラーが出来ているみたいです。 Class.forNameの使い方が良く分かりませんので、ご指示をお願いいたします。 package fighter; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.sql.Connection; import java.sql.DriverManager; public class DbTest { public static void main(String[] args) { try { //JDBCドライバの登録 Class.forName("oracle.jdbc.driver.oracledriver"); //接続文字列を作成 String strConn ="jdbc:oracle:thin:@199.65.20.24:1521:TEST" + "kgcust" + "kgcust"; //コネクションオブジェクトを取得 Connection conn = DriverManager.getConnection(strConn); //ステートメントオブジェクトを取得 Statement stmt = conn.createStatement(); //SQLコマンド文字列を作成 String strSql = "SELECT * FROM CM_MAST"; //問合せを実行し、リザルトセットオブジェクトを取得 ResultSet rs = stmt.executeQuery(strSql); //リザルトセットの内容を表示 while (rs.next()) { System.out.println(rs.getInt("cm_cd") + ":" + rs.getString("name")); } rs.close(); //リザルトセットオブジェクトを解放 stmt.close(); //ステートメントオブジェクトを解放 conn.close(); //コネクションオブジェクトを解放 } catch (SQLException e) { //SQLの例外をキャッチ System.out.println("データベースのエラーです。"); System.out.println("エラーメッセージ:" + e.getMessage()); } catch (Exception e) { //SQL以外の例外をキャッチ e.printStackTrace(); } } } 実行エラーメッセージ ===================================== java.lang.ClassNotFoundException: oracle.jdbc.driver.oracledriver at java.net.URLClassLoader$1.run(URLClassLoader.java:199) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:187) at java.lang.ClassLoader.loadClass(ClassLoader.java:289) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:274) at java.lang.ClassLoader.loadClass(ClassLoader.java:235) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:141) at fighter.DbTest.main(DbTest.java:27) | ||||||||
|
投稿日時: 2004-06-22 15:54
真似て覚えるのは大事ですが、わからない部分は API ドキュメントなどを参照しましょう。
http://java.sun.com/j2se/1.4.2/docs/api/index.html NoClassDefFoundError や ClassNotFoundException は多くの場合クラスパスに問題があります。 クラスパスに Oracle の JDBC ドライバが通っているか確認しましょう。恐らく参考にした資料にも載っていると思います。 [ メッセージ編集済み 編集者: インギ 編集日時 2004-06-22 15:56 ] | ||||||||
|
投稿日時: 2004-06-22 16:22
クラス名はcase sensitive。大文字・小文字の区別を意識する必要があります。 | ||||||||
|
投稿日時: 2004-06-22 16:46
ご返答ありがとうございます。
インギ 様へ:APIを見たのですが、原因がわかりません。クラスパスに Oracle の JDBC ド ライバが通っているか確認する方法をおしえていただけませんか。 佐々木 様へ:私は未だにClass.forName();の括弧の中に"oracle.jdbc.driver.oracledriver"を書く理由がわかりません。 case sensitiveを書いたのですが、下記エラーがでました。 ======================================================= java.lang.ClassNotFoundException: case sensitive at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:141) at fighter.DbTest.main(DbTest.java:27) お手数をおかけ致しますが、よろしくお願いいたします。 | ||||||||
|
投稿日時: 2004-06-22 16:56
そのJavaプログラムをどのように実行しているのでしょうか。 コマンドラインから直接実行しているのなら、-classpathオプションでクラスパスを指定している はずですが、その中にOracleのJDBCライブラリが入っていますか?
「case sensitive」というのは「大文字・小文字を区別する」という意味です。 つまり、クラス名の大文字小文字が間違っていてはいけない、ということです。もう一度参考に している文章をよく読んで、大文字小文字を間違えないように入力してみてください。 なお、Class.forName()を実行するのは、ドライバクラスをあらかじめロードしておく必要が あるからです。 | ||||||||
|
投稿日時: 2004-06-22 17:14
ご返答ありがとうございます。
このプログラムをEclipseで実行しております。 システムプロパティでclasspath:C:\j2sdk1.4.2_04\jre\lib\;を指定しています。 その中にJDBCドライバがが置かれています。 現在参考している資料はMySQLのドライバが書かれていますが(Class.forName("com.mysql.jdbc.Driver"))、こちらでOracleのDBを使うので Oralce用のドライバをダウンロードしました。そこを書き換えました。 この場合はClass.forName();括弧の中にどう書けば宜しいでしょうか。 お手数をおかけ致しますが、よろしくお願いいたします。 | ||||||||
|
投稿日時: 2004-06-22 17:26
ディレクトリを指定するだけではだめです。ドライバのファイルそのものを指定してください。
Class.forName("oracle.jdbc.driver.OracleDriver"); です。ご自分のコードとよーく見比べてみてください | ||||||||
|
投稿日時: 2004-06-22 19:06
ご回答ありがとうございます、
やっぱり実行エラーが出ます、 下記はソースの抜粋です。皆さんはよかったら、 Class.forName("oracle.jdbc.driver.OracleDriver"); まで書いていただいて 実行してみていただけませんか。 こちらは如何しても実行エラーがでるのです。 CLASSPATHは下記です。 CLASSPATH:C:\j2sdk1.4.2_04\jre\lib\ojdbc14.jar;C:\Program Files\Java\j2re1.4.2_04\lib\ext\ojdbc14.jar お手数をおかけ致しますが、よろしくお願いいたします。 package fighter; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.sql.Connection; import java.sql.DriverManager; public class DbTest { public static void main(String[] args) { try { System.out.println("1------------------------------------------------------"); //JDBCドライバの登録 Class.forName("oracle.jdbc.driver.OracleDriver"); System.out.println("2------------------------------------------------------"); 実行エラー ================================= 1----------------------------------------------------------- java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver at java.net.URLClassLoader$1.run(URLClassLoader.java:199) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:187) at java.lang.ClassLoader.loadClass(ClassLoader.java:289) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:274) at java.lang.ClassLoader.loadClass(ClassLoader.java:235) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:141) at fighter.DbTest.main(DbTest.java:29) | ||||||||
