質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.51%

  • Java

    15804questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • MySQL

    6988questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

【Java】メイン・クラス”クラス名”が見つからなかったかロードできませんでした

解決済

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 5,976

yuichikubo

score 4

前提・実現したいこと

javaでMySQLに接続してデータ表示を行いたいです。

JDBCドライバはインストール済で、環境変数のユーザ環境変数にてクラスパスは設定済です。
変数名:CLASSPATH
変数値:.;c:¥memo¥lib¥mysql-connector-java-5.1.39-bin.jar

発生している問題・エラーメッセージ

C:¥memo¥JDBC>javac -encoding UTF-8 JdbcTest.java
↓
C:¥memo¥JDBC>java JdbcTest

エラー: メイン・クラスJdbcTestが見つからなかったかロードできませんでした

該当のソースコード

import java.sql.*;
//java.sqlパッケージのインポート//

class JdbcTest{
    public static void main(String[] args){
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        //3つのオブジェクトを初期化//

        try{
            Class.forName("com.mysql.jdbc.Driver");
            /*クラスローダによりJDBCドライバを読み込んでいることを示している。
            引数は、データベースにアクセスするためのJDBCドライバのクラス名である*/

            String strConn = "jdbc:mysql://localhost/memo"
                +"?user = root&password = ky890703";
                //コネクション文字列作成//

            conn = DriverManager.getConnection(strConn);
            //DriverManagerクラスのgetConnectionメソッドを使ってデータベースに接続する//

            stmt = conn.createStatement();
            /*データベースの接続後に、sql文をデータベースに直接渡すのではなく、
            sqlコンテナの役割を果たすオブジェクトに渡すためのStatementオブジェクトを作成する*/

            String strSql = "SELECT * FROM USER";
            //SQL文作成//

            rs = stmt.executeQuery(strSql);
            //問合せ文の実行//

            while(rs.next()){
              int userId = rs.getInt("USER_ID");
              String password = rs.getString("PASSWORD");
              String userName = rs.getString("USER_NAME");
              System.out.println(userId+":"+password+":"+userName);
              //getInt()&getString()メソッドは、引数に指定されたフィールド名(列)の値をint&Stringとして取得する//
            }
          }catch(Exception e){
              e.printStackTrace();
              //全ての例外をキャッチしている//

            }finally{
              try{rs.close();}catch(SQLException e){e.printStackTrace();}
              try{stmt.close();}catch(SQLException e){e.printStackTrace();}
              try{conn.close();}catch(SQLException e){e.printStackTrace();}
              //データベースオブジェクトをクローズしている//
            }
        }
}

試したこと

・クラスパスに間違いがないか確認。また-cpを使ったクラスパス指定でもやってみましたが、エラー。
・javacにてコンパイルされたクラスファイルはカレントディレクトリ(C:¥memo¥JDBC)にあることの確認。

補足情報(言語/FW/ツール等のバージョンなど)

より詳細な情報

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • kozzy

    2016/09/10 10:18 編集

    環境変数を消して、cpも指定せず実行(java)するとエラーの内容は変わりますか?
    ソースのimportの前にpackageは指定されていませんか?

    キャンセル

  • yuichikubo

    2016/09/10 10:53

    ありがとうございます。
    環境変数を消して、cpも指定せずやってみましたが、同じエラーが出ました。
    ちなみにpackageはしておりません。

    キャンセル

回答 3

checkベストアンサー

0

javaの設定の問題だとおもわれますが、以下の例は実行できますか?

public class Test {

    public static void main(String[] args) {
        System.out.println("Hello.");
    }

}
C:\temp\test>javac Test.java

C:\temp\test>java Test
Hello.

C:\temp\test>

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/09/10 11:37

    ありがとうございます。
    仰るとおりこれでも同じエラーが出てしまいました。以前は普通に表示されていたのですが。。
    この場合どこを確認すればよろしいのでしょうか?

    キャンセル

  • 2016/09/10 11:50

    コマンドプロンプトで「set」を打つと環境変数の一覧が出ます。
    そのときのCLASSPASSが変になっているのでしょうか?

    キャンセル

  • 2016/09/10 11:59

    ありがとうございます。
    CLASSPATH=C:\memo\lib\mysql-connector-java-5.1.39-bin.jar
    になっております。

    キャンセル

  • 2016/09/10 12:06

    これだとカレントディレクトリへのパスが通ってないので?
    どこかでクラスパスを上書きしてませんか?

    キャンセル

  • 2016/09/10 12:12

    確かにそうですね。
    環境変数のユーザ環境変数では確かに
    変数名:CLASSPATH
    変数値:.;C:\memo\lib\mysql-connector-java-5.1.39-bin.jar
    になっているのですが。。
    これを上書きされる可能性はどこならありうるのでしょうか?

    キャンセル

  • 2016/09/10 12:19

    コマンドプロンプトにて
    set CLASSPATH=.;%CLASSPATH%
    を実行したらカレントディレクトリへパスも通るようになりました!
    ありがとうございます!

    キャンセル

  • 2016/09/10 12:25

    プロンプトはバッチファイルで立ち上げてるのでしょうか?そこでクラスパスを上書きしているという可能性は?

    キャンセル

  • 2016/09/10 12:29

    いえそのようなファイルは作成していません。なぜなのでしょうかね?
    ちなみにクラスパスは通ったようなのですが、新しく下記のような表示になってしまいました。
    また別の問題ですよね?
    Sat Sep 10 12:17:02 JST 2016 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
    java.sql.SQLException: Access denied for user ''@'localhost' (using password: NO)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:963)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3966)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3902)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:875)
    at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1712)
    at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1228)
    at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2253)
    at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2284)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2083)
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:806)
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:404)
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:410)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:328)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at JdbcTest.main(JdbcTest.java:20)
    Exception in thread "main" java.lang.NullPointerException
    at JdbcTest.main(JdbcTest.java:45)

    キャンセル

  • 2016/09/10 12:41

    今度はMySQLとの兼ね合いの問題だと思います。
    ここからは、私にはわかりません。

    キャンセル

  • 2016/09/10 12:49

    わかりました。
    ご丁寧にご回答いただきましてありがとうございました!

    キャンセル

  • 2016/09/10 13:26

    うーん、そういう結末でしたか。しかし、 -cp .;c:¥... とした時にはどうして動かなかったんでしょうか。手元(Mac OS)でテストした時は、環境変数が間違っていても -cp で指定すると動いたんですが・・・

    キャンセル

0

カレントディレクトリの JdbcTest.class を見つけられていません。

以下のことを思いついて回答しましたが、誤りでした。
Windows ではクラスパスはセミコロンで区切るので正解です。


変数名:CLASSPATH 
変数値:.;c:¥memo¥lib¥mysql-connector-java-5.1.39-bin.jar

クラスパスはセミコロン(;)ではなく、コロンで区切ってください。

.:c:¥memo¥lib¥mysql-connector-java-5.1.39-bin.jar

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/09/10 10:54

    ありがとうございます。
    セミコロンからコロンに変えてみたのですが、同じエラーが表示されてしまいました。

    キャンセル

  • 2016/09/10 11:34

    すみません間違えました。Windows ですね。セミコロンで正解です。ただ、エラーメッセージからすると、カレントディレクトリを検索できてないと思います。

    キャンセル

  • 2016/09/10 11:48

    ありがとうございます。他の方のご指摘で気が付いたのですが、以前は簡単な文字の出力ができていたのに、今できなくなっていました。。おそらくjavaの設定が変わってしまっているのだと思います。

    キャンセル

0

補足として

1.恐らくご存知と思いますが、ユーザー環境変数を変更しても既に起動中のコマンドプロンプトには反映されません。
2.うろ覚えですが、一旦ログアウトしないとXpでは反映されなかったような気もします。
3.システム環境変数に設定されている可能性はありませんか。
4.最終手段として、regeditで原因となったカレントディレクトリの無いパス文字列を検索するとどこで設定されているかが分かると思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/09/10 12:53

    ありがとうございます。
    コマンドプロンプトにて
    set CLASSPATH=.;%CLASSPATH%
    を実行したらカレントディレクトリへパスも通るようになりました!
    ご指示いただいたことも試してみたいと思います。

    キャンセル

同じタグがついた質問を見る

  • Java

    15804questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • MySQL

    6988questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。