Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

java.lang.NoClassDefFoundErrorというエラーが出ます。

初めまして。
Javaからデータベースにアクセスして、データの表示を行うプログラムを作成しました。
しかし、コマンドプロンプトからコンパイルして実行すると、エラーが出ます。
このエラーを回避するにはどうしたらよいのでしょうか?

----------------------------------------------------
実行環境
Windows XP
MySQL 5.0
----------------------------------------------------

表示されるエラー文です。

C:\JAVA>java DBTest
Exception in thread "main" java.lang.NoClassDefFoundError: DBTest
Caused by: java.lang.ClassNotFoundException: DBTest
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClassInternal(Unknown Source)
Could not find the main class: DBTest.  Program will exit.

-------------------------------------------------------------------

環境変数
CLASSPATH=C:\Program Files\Apache Software Foundation\Tomcat 5.5\common\lib\servlet-api.jar;C:\Program Files\Java\jdk1.6.0_10\bin

JAVA_HOME=C:\Program Files\Java\jre6

Path=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\MySQL\MySQL Server 5.0\bin;C:\Program Files\Java\jdk1.6.0_10\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\MySQL\MySQL Server 5.0\bin;C:\Program Files\Java\jdk1.6.0_10\bin;C:\Program Files\Java\jdk1.6.0_10\bin

-----------------------------------------------------------------
作成したプログラムです。

import java.sql.*;

class DBTest {
    public static void main(String args[]) {
        try {
            //JDBCドライバの登録
            Class.forName("com.mysql.jdbc.Driver");
            
            //接続文字列を作成
            String strConn = "jdbc:mysql://localhost/jamyto"
                + "?user=Mulder&password = root"
                + "&useUnicode=true&characterEncoding=Shift_JIS";
            
            //コネクションオブジェクトを取得
            Connection conn = DriverManager.getConnection(strConn);
            
            //ステートメントオブジェクトを取得
            Statement stmt = conn.createStatement();
            
            //SQLコマンド文字列を作成
            String strSQL = "select * from person";
            
            //問い合わせを実行し、リザルトセットオブジェクトを取得
            ResultSet rs = stmt.executeQuery(strSQL);
            
            //リザルトセットの内容を表示
            while(rs.next()) {
                System.out.println(rs.getInt("id") + ":" + 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();
        }
    }
}

検索サイトでも調べてみました。
ここのサイトでも、過去ログの中に似たようなものがあったので、
試してみたのですが、解決には至らなかったので質問しました。
よろしくお願いいたします。

4

回答

8730

閲覧

4件の回答

評価

0

どんな調べ方したのか知らないが、
クラスパスの意味がわかってたら、お終いのはずだがな。

MySQLのJDBCドライバは、入手してあるんだろうね。

評価

0

回答ありがとうございます。

MySQLのJDBCドライバは入手してあります。
C:\Program Files\Java\jdk1.6.0_10\lib\extとC:\Program Files\Java\jre6\lib\extの中にコピーしてあります。

評価

0

あり?
エラーが出てるのは、DBTestの方か。
メッセージをちゃんと読もうぜ。orz

というわけで、DBTestをクラスパスに加えてあげましょう。

評価

0

不良社員さん >

ありがとうございます!
以下のようにクラスパスを設定したら、実行することができました。

CLASSPATH=C:\Program Files\Apache Software Foundation\Tomcat 5.5\common\lib\servlet-api.jar;C:\Program Files\Java\jdk1.6.0_10\bin;C:\JAVA

ただ、プログラムがどこかミスしているようで、SQLの例外が出てしまいました。
ひとまず、自分で考えてみたいと思います。

本当にありがとうございました。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。