- - PR -
【ご質問】MySQLとJavaをJDBCで接続できない状況です
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 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」のみが、 表示される設定にしています。 | ||||
|
投稿日時: 2007-11-05 17:21
メッセージの通りかと・・・。
1.JDBCドライバにクラスパスが設定されていないか誤っている。 2.ロードしようとするドライバのクラス名が誤っている。 つまり、原因が解らないのではなく、解ろうとしてないってことです。 | ||||
|
投稿日時: 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-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) ============================================================= | ||||
|
投稿日時: 2007-11-06 09:45
ところで、質問する前にサンのJavaAPIで調べたんですか?
そうしていれば、雲をつかむような話ではないと気付くはず。 あと回答といっても、この手は過去に幾らでも出ているので、 適当に検索すれば出てきます。 もし経験が浅い方なら自己解決して下さい。 その経験が今後に生きてきますから。 | ||||
|
投稿日時: 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-06 10:23
Takuさん
そのとおりです。 おっしゃる通り、調べる力が足りないようでした。 かなり調べたつもりだったんですが、見つからなかったです。 でも、ちゃんと見つけることが出来る人は 見つけることができるのだろうと思うと、つらいところです。 ところで、SunのJavaAPIのサイト(http://java.sun.com/javase/ja/6/docs/ja/) も見させて頂きました。 ところで、DOSについてですが、 上記のソースコードから「package JdbcTrial;」 をコメントアウトしてやると実行することができました。 これについては、まだよく分かっていませんが、 これについても、再度自分で調査してみます。 とりあえず、皆さん、 ありがとうございました!! | ||||
|
投稿日時: 2007-11-06 15:11
初投稿でし!
これも、DOSの場合はなぜコメントアウトしたら実行可能になったのか? コメントアウトしたものが何をあらわしていているものなのか? そこを調べれば(考えれば)良いと思いますよ^^ ※私もまだ3年程度なのでよく調べまくりです! 全然分からない事が多すぎて……えへへ^^; ここは初歩的レベルなので、是非納得して理解してもらいたいですね! |