- PR -

【ご質問】MySQLとJavaをJDBCで接続できない状況です

投稿者投稿内容
たいし
会議室デビュー日: 2007/11/05
投稿数: 4
投稿日時: 2007-11-05 17:12
はじめまして、たいしと申します。
現在、下記のプログラム(【1】)を作って、
JavaからJDBCを介してMySQLを接続したいと考えています。
ここで、【2】のようなエラーが出てしまいます。

=======================================================================
【1】プログラム
=======================================================================
package JdbcTrial;
import java.sql.*;

public class JdbcTest {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
// 1.JDBC Driver の登録
Class.forName("com.mysql.jdbc.Driver").newInstance();
// 2.データベースへの接続
Connection con = DriverManager.getConnection("jdbc:mysql://localhost/test", "root", "falcon28");
// 3.SQL ステートメント・オブジェクトの作成
Statement stmt = con.createStatement();
// 4.SQL ステートメントの発行
ResultSet rs = stmt.executeQuery("SELECT * from sample");
// 5.結果の出力
while (rs.next()) {
System.out.println(rs.getString("namae"));
}
// 6.データベースのクローズ
rs.close();
stmt.close();
con.close();
} catch (SQLException e1) {
System.out.println("SQLException: " + e1.getMessage());
System.out.println("SQLState: " + e1.getSQLState());
System.out.println(" VendorError: " + e1.getErrorCode());
} catch (Exception e2) {
System.out.println("Exception: " + e2.getMessage());
e2.printStackTrace(); //ここを追加
}
}

}
=======================================================================

=======================================================================
【2】出力コード
=======================================================================
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)
at JdbcTrial.JdbcTest.main(JdbcTest.java:13)
Exception: com.mysql.jdbc.Driver

どなたか、この問題を解決する方法をご存知でしたら、
ご解説のほどをお願い致します。

※追伸:
プログラムに「e2.printStackTrace(); //ここを追加」を追加したことで、
出力の最下行以外の複数行が表示される仕掛けを作っています。
ただし、この仕掛けを見ても、原因がわからない状況です。
この仕掛けがなければ、「Exception: com.mysql.jdbc.Driver」のみが、
表示される設定にしています。
taku
ぬし
会議室デビュー日: 2002/11/12
投稿数: 918
お住まい・勤務地: 墨田区→中野区
投稿日時: 2007-11-05 17:21
 メッセージの通りかと・・・。

1.JDBCドライバにクラスパスが設定されていないか誤っている。
2.ロードしようとするドライバのクラス名が誤っている。

つまり、原因が解らないのではなく、解ろうとしてないってことです。
Java僧
ぬし
会議室デビュー日: 2003/11/06
投稿数: 261
投稿日時: 2007-11-05 17:39
昔からCLASSPATHでつまづく人が多いです。
http://java-house.jp/ml/archive/j-h-b/023336.html#body

古いですがJavaHouseのトピックスはいまでも役に立ちます。
http://java-house.jp/ml/topics/
たいし
会議室デビュー日: 2007/11/05
投稿数: 4
投稿日時: 2007-11-06 09:27
僧さんのおっしゃるように、
C:\JavaTraining>javac -d . JdbcTest.java
としたんですが、下記のようなエラーが出てしまいました。

どうして良いものでしょうか。

=============================================================
C:\JavaTraining\JdbcTrial>java JdbcTest
Exception in thread "main" java.lang.NoClassDefFoundError: JdbcTest (wrong name:
JdbcTrial/JdbcTest)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:12
4)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
at java.net.URLClassLoader.access$000(URLClassLoader.java:56)
at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
=============================================================
taku
ぬし
会議室デビュー日: 2002/11/12
投稿数: 918
お住まい・勤務地: 墨田区→中野区
投稿日時: 2007-11-06 09:45
 ところで、質問する前にサンのJavaAPIで調べたんですか?
そうしていれば、雲をつかむような話ではないと気付くはず。
あと回答といっても、この手は過去に幾らでも出ているので、
適当に検索すれば出てきます。
もし経験が浅い方なら自己解決して下さい。
その経験が今後に生きてきますから。
たいし
会議室デビュー日: 2007/11/05
投稿数: 4
投稿日時: 2007-11-06 09:50
Java僧さん、Takuさん、ありがとうございました!!
お二人のお話をヒントに調査した結果、実行することができました!!

ところで、私の実行環境をお書きしていませんでしたので、
今更ながらお書きしますと、下記のとおりです。

===========================================================
OS : Windows XP
開発環境 : Eclipse
JDBC Driver for MySQL : mysql-connector-java-5.1.5-bin.jar
JDK : jdk1.6.0_03
JRE : jre1.6.0_03
===========================================================
そして、今回エラーが出たときの状況は、
OSの環境設定には、Classpathを設定し、
Eclipseには環境変数を設定していなかったということです。

※OSの環境設定については、外しても外さなくても実行できたました。
Eclipseについては、「プロジェクト」タブの「プロパティー」から
「Java Build Path」→「Libraries」という場所に遷移し、
ここに、JDBC Driverのjarを追加してやれば実行できました!!

※DOS上では現状では、先ほどの書き込みに書いたように実行が成功していません。
これについては、DOSでも実行する場合があるので、
成功できるようにしたいと考えています。

お手数ですが、お力をお貸しください!!
たいし
会議室デビュー日: 2007/11/05
投稿数: 4
投稿日時: 2007-11-06 10:23
Takuさん

そのとおりです。
おっしゃる通り、調べる力が足りないようでした。
かなり調べたつもりだったんですが、見つからなかったです。
でも、ちゃんと見つけることが出来る人は
見つけることができるのだろうと思うと、つらいところです。

ところで、SunのJavaAPIのサイト(http://java.sun.com/javase/ja/6/docs/ja/)
も見させて頂きました。

ところで、DOSについてですが、
上記のソースコードから「package JdbcTrial;」
をコメントアウトしてやると実行することができました。

これについては、まだよく分かっていませんが、
これについても、再度自分で調査してみます。

とりあえず、皆さん、
ありがとうございました!!
trickster
会議室デビュー日: 2004/08/05
投稿数: 8
お住まい・勤務地: 東京の外れで気持ちは千葉っ子
投稿日時: 2007-11-06 15:11
初投稿でし!

引用:
ところで、DOSについてですが、
上記のソースコードから「package JdbcTrial;」
をコメントアウトしてやると実行することができました。



これも、DOSの場合はなぜコメントアウトしたら実行可能になったのか?
コメントアウトしたものが何をあらわしていているものなのか?
そこを調べれば(考えれば)良いと思いますよ^^
※私もまだ3年程度なのでよく調べまくりです!
全然分からない事が多すぎて……えへへ^^;

ここは初歩的レベルなので、是非納得して理解してもらいたいですね!

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