- PR -

MYSQLのJDBCの接続が出来なくて困っています。

投稿者投稿内容
monmon
会議室デビュー日: 2005/07/04
投稿数: 6
投稿日時: 2005-07-04 19:42
JAVA初心者ですがJDBCでの接続を試みていますがうまくいきません。

環境は
OS WindowsXP pro
java2SDK 1.4.2_08
MYSQL 4.0.13
です。
またJDBCの設定は
MYSQL-CONNECTOR JAVA 3.0.8 STABLE BIN.jarで、
こちらのものを"C:\j2sdk1.4.2_08\jre\lib\ext"と"C:\Program Files\Java\j2re1.4.2_08\lib\ext"にコピーしています。
私の勘違いかもしれませんが、こちらにコピーした場合は特にclasspathを環境設定
で追加しなくてもいいと思って設定はしていませんでした。

しかし、javac dbtest2.java または javac -classpath "c:\j2sdk1.4.2_08\jre\lib\ext\mysql-connector-java-3.0.8-stable-bin.jar" dbtest2.java というコマンドではコンパイルされているのですが、
java dbtest2 や java -classpath "c:\jdbc\mysql-connector-java-3.0.8-stable\mysql-connector-java-3.0.8-stable-bin.jar" dbtest2 というコマンドで
実行しても下記のようなエラーで接続できません。

java.lang.ClassNotFoundException: com.jdbc.mysql.Driver
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)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at dbtest2.main(dbtest2.java:15)
接続が確立できません。
またCLASSPATHを設定したほうがいいのかと思い、環境設定でCLASSPATHを下記のように
追加しましたが、エラーは特に変わりませんでした。

".;C:\j2sdk1.4.2_08\lib\tools.jar;;.;C:\j2sdk1.4.2_08\jre\lib\ext\mysql-connector-java-3.0.8-stable-bin.jar"


ちなみにこちらのsorce(dbtest2.java)は下記のようなものです。

import java.io.*;
import java.util.*;
import java.sql.*;
import java.net.*;

public class dbtest2{
public static void main(String argv[]){
String hostname = "localhost:3306"; // MySQLが動作しているホスト名
String DBName = "jamyto"; // テーブル名
String username = "Mulder"; // MySQLのユーザID
String password = "TrustNo1"; // MySQLのパスワード
Connection con = null;
try{
// ドライバをロード
Class.forName("com.jdbc.mysql.Driver");

// 接続の確立
// getConnection(String url)の場合
con = DriverManager.getConnection(
"jdbc:mysql://"
+ hostname
+ "/"
+ DBName
+ "?user="
+ username
+ "&password="
+ password);
// getConnection(String url, String name, String password)の場合
/*con = DriverManager.getConnection(
"jdbc:mysql://"
+ hostname
+ "/"
+ DBName
, username, password);*/
}catch(Exception e){
e.printStackTrace();
}
if(con == null){
System.out.println("接続が確立できません。");
System.exit(0);
}

try{
// ステートメントの生成
Statement stmt = con.createStatement();
// テーブルaddressTableからすべての行のname,address,phoneを取得
ResultSet rs = stmt.executeQuery(
"SELECT * FROM perspn");
// すべての結果を表示
while(rs.next()){
String id = rs.getString("id");
String name = rs.getString("name");
//String phone = rs.getString("phone");
System.out.println("id: " + id + " name: " + name);
}

// 接続のクローズ
con.close();
}catch(Exception e){
e.printStackTrace();
}
}
}

こちらの会議室のものもいろいろ似たようなものを見させて頂きましたが、何をやってもうまくいきません。
どうか、どこが悪いのかお教え頂けないでしょうか?
宜しくお願い致します。
Odakaz
ベテラン
会議室デビュー日: 2004/05/24
投稿数: 70
投稿日時: 2005-07-04 20:57
例外の内容を見ると、
引用:

java.lang.ClassNotFoundException: com.jdbc.mysql.Driver
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)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at dbtest2.main(dbtest2.java:15)


となっていますので、ロードしようとしているドライバのクラス名が正しくない(jarファイル内に存在しているクラス名と合っていない)んじゃないでしょうか。
jarファイルの中を確認されてみてはいかがでしょう。
monmon
会議室デビュー日: 2005/07/04
投稿数: 6
投稿日時: 2005-07-05 09:30
早速ご返事いただきありがとうございます。
何せ初心者なもので、.jarファイルのことがよく分かっていません。
javacコマンドでコンパイルするとclassファイルは同じディレクトリにあるのは分かるのですが、jarファイルはどこにあるのでしょうか?
Cドライブ内を".jar"でファイルを検索してみましたが、javaファイルやclassファイルと同じ名前の.jarファイルはありませんでした。
すみませんが、どこを見ればよいのでしょうか?
宜しくお願い致します。
キリウム
会議室デビュー日: 2003/07/04
投稿数: 11
投稿日時: 2005-07-05 10:35
mysql-connector-java-3.0.8-stable-bin.jar
を+Lhacaとかで解凍してみてください。
出てきたファイルの中にDriver.classってないですか?
そのパッケージに合わせて

// ドライバをロード
Class.forName("com.jdbc.mysql.Driver");

を変更すればうまくいくと思います。
monmon
会議室デビュー日: 2005/07/04
投稿数: 6
投稿日時: 2005-07-05 11:58
mysql-connector-java-3.0.8-stable-bin.jarファイルを解凍してみました。
すると三つのディレクトリに分かれて"Driver.class"ファイルを見つけました。
二つあって"\mysql-connector-java-3.0.8-bin\com\mysql\jdbc"内と"\mysql-connector-java-3.0.8-stable-bin\org\gjt\mm\mysql"内にあることが分かりました。
但し、ちょっと気になることなのですが、その両方のファイルとも0バイトでファイルを開いても何もないのです。
ひょっとしてドライバー自体が意味のないものなのでしょうか?
キリウム
会議室デビュー日: 2003/07/04
投稿数: 11
投稿日時: 2005-07-05 13:39
引用:
但し、ちょっと気になることなのですが、その両方のファイルとも0バイトでファイルを開いても何もないのです。


なぜでしょう?
私の手元にあるmysql-connector-java-3.1.10-binでは0バイトではないのですが…
可能であれば、コネクターを替えてみてはいかがですか?
monmon
会議室デビュー日: 2005/07/04
投稿数: 6
投稿日時: 2005-07-05 15:36
Odakazさんやキリウムさんのお返事を参考にいろいろ試しています。
現在"mysql-connector-java-3.1.10-bin.jar"にコネクターを変更してみました。

こんどはコマンド時「javac -classpath "C:\j2sdk1.4.2\08\jre\lib\ext\mysql-connector-java-3.1.10-bin.jar" dbtest2.java」とするとコンパイルがとおり、次に
「java -classpath "C:\j2sdk1.4.2\08\jre\lib\ext\mysql-connector-java-3.1.10-bin.jar" dbtest2」として実行すると
「Exception in thread "main" java.lang.NoClassDefFoundError: dbtest2」というエラーになります。

根本的に設定などがおかしいのかと思っていますが、何をどうしたらよろしいでしょうか?何度も申し訳ございません。
monmon
会議室デビュー日: 2005/07/04
投稿数: 6
投稿日時: 2005-07-05 15:36
Odakazさんやキリウムさんのお返事を参考にいろいろ試しています。
現在"mysql-connector-java-3.1.10-bin.jar"にコネクターを変更してみました。

こんどはコマンド時「javac -classpath "C:\j2sdk1.4.2\08\jre\lib\ext\mysql-connector-java-3.1.10-bin.jar" dbtest2.java」とするとコンパイルがとおり、次に
「java -classpath "C:\j2sdk1.4.2\08\jre\lib\ext\mysql-connector-java-3.1.10-bin.jar" dbtest2」として実行すると
「Exception in thread "main" java.lang.NoClassDefFoundError: dbtest2」というエラーになります。

根本的に設定などがおかしいのかと思っていますが、何をどうしたらよろしいでしょうか?何度も申し訳ございません。

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