- PR -

JDBCドライバ使用するPG実行エラー

投稿者投稿内容
kaokun
会議室デビュー日: 2004/06/04
投稿数: 9
投稿日時: 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)
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 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 ]
佐々木
大ベテラン
会議室デビュー日: 2003/03/30
投稿数: 121
投稿日時: 2004-06-22 16:22
引用:

Class.forName("oracle.jdbc.driver.oracledriver");


クラス名はcase sensitive。大文字・小文字の区別を意識する必要があります。
kaokun
会議室デビュー日: 2004/06/04
投稿数: 9
投稿日時: 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)

お手数をおかけ致しますが、よろしくお願いいたします。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-06-22 16:56
引用:

kaokunさんの書き込み (2004-06-22 16:46) より:
インギ 様へ:APIを見たのですが、原因がわかりません。クラスパスに Oracle の JDBC ド       ライバが通っているか確認する方法をおしえていただけませんか。


そのJavaプログラムをどのように実行しているのでしょうか。
コマンドラインから直接実行しているのなら、-classpathオプションでクラスパスを指定している
はずですが、その中にOracleのJDBCライブラリが入っていますか?

引用:

佐々木 様へ:私は未だにClass.forName();の括弧の中に"oracle.jdbc.driver.oracledriver"を書く理由がわかりません。
case sensitiveを書いたのですが、下記エラーがでました。


「case sensitive」というのは「大文字・小文字を区別する」という意味です。
つまり、クラス名の大文字小文字が間違っていてはいけない、ということです。もう一度参考に
している文章をよく読んで、大文字小文字を間違えないように入力してみてください。

なお、Class.forName()を実行するのは、ドライバクラスをあらかじめロードしておく必要が
あるからです。
kaokun
会議室デビュー日: 2004/06/04
投稿数: 9
投稿日時: 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();括弧の中にどう書けば宜しいでしょうか。

お手数をおかけ致しますが、よろしくお願いいたします。



uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-06-22 17:26
引用:

kaokunさんの書き込み (2004-06-22 17:14) より:
このプログラムをEclipseで実行しております。
システムプロパティでclasspath:C:j2sdk1.4.2_04jrelib;を指定しています。
その中にJDBCドライバがが置かれています。


ディレクトリを指定するだけではだめです。ドライバのファイルそのものを指定してください。

引用:

この場合はClass.forName();括弧の中にどう書けば宜しいでしょうか。


Class.forName("oracle.jdbc.driver.OracleDriver");
です。ご自分のコードとよーく見比べてみてください
kaokun
会議室デビュー日: 2004/06/04
投稿数: 9
投稿日時: 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)

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