- - PR -
サーブレットから、MySQLに接続できない。
| 投稿者 | 投稿内容 | ||||||||
|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-06-06 10:08
amapです。
Webアプリケーションの勉強のため、ある書籍(下記参照)を購入し、データベースとの接続の項目まで試して、うまくいっていたのですが、ここにきて、行き詰ってしまっています。 どなたか、ご教示頂ければ幸いです。 経緯: MySQLのインストール後は、Windows XPのコマンドプロンプトから、mysql>に続けて、SELECT文等を使用してMySQLに登録してあるテーブルの利用ができることを確認してあります。 JDBCドライバとして、mysql-connector-java-3.0.11-stable-bin を C:\Program Files\Apache Software Foundation\Tomcat 5.0\common\lib ディレクトリにコピーしました。 EclipseでHelloMySQL.javaをコンパイル、保存し、FreeAppにデプロイメントしました。プロブレムはでませんでした。 Apacheと Tomcat 5.0.25と MySQL 4.0.18-ntを起動して、タスクバーにはMySQLの緑の信号機マークが表示されました。Webブラウザで、http://localhost/FreeApp/HelloMySQL を開こうとしても下記のようなコメントが出て MySQLと接続できませんでした。 (ちなみに、JDBCドライバとして、mysql-connector-java-3.0.14-production-binで行っても旨くいきませんでした。 ) HelloMySQL のソースコード (著作について:内容は技術評論社のウェブDBプレス vol.20より、転記。) import java.io.IOException; import java.sql.*; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServlet; public class HelloMySQL extends HttpServlet { public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException { //TODO Method stub generated by Lomboz response.setContentType("text/html;charset=Shift_JIS"); java.io.PrintWriter out = response.getWriter(); out.println("<html><head><title>HelloMySQL</title></ head><body>"); try{ Class.forName("com.mysql.jdbc.Driver"); String url = "jdbc:mysql///test?useUnicode= true&characterEncoding=SHIFT_JIS"; Connection con = DriverManager.getConnection(url); Statement stmt = con.createStatement(); String sql = "SELECT artist, title FROM cdlist"; ResultSet rs = stmt.executeQuery(sql); out.println("<table border='1'>"); while(rs.next()) { String artist = rs.getString("artist"); String title = rs.getString("title"); out.println("<tr><td>" + artist + "</td>" + "<td>" + title + "</td></tr>"); } out.println("</table>"); stmt.close(); con.close(); }catch (Exception e) { e.printStackTrace(out); } out.println("</body></html>"); } } JDBCドライバとして、mysql-connector-java-3.0.11-stable-binを 使用。 java.sql.SQLException: No suitable driver at java.sql.DriverManager.getConnection(Unknown Source) at java .sql.DriverManager.getConnection(Unknown Source) at HelloMySQL.service(HelloMySQL.java:32) at org. apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237) at org.apache. catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157) at org.apache.catalina.core. StandardWrapperValve.invoke(StandardWrapperValve.java:214) at org.apache.catalina.core. StandardValveContext.invokeNext(StandardValveContext.java:104) at org.apache.catalina.core. StandardPipeline.invoke(StandardPipeline.java:520) at org.apache.catalina.core.StandardContextValve. invokeInternal(StandardContextValve.java:198) at org.apache.catalina.core.StandardContextValve.invoke( StandardContextValve.java:152) at org.apache.catalina.core.StandardValveContext.invokeNext( StandardValveContext.java:104) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java: 520) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137) at org.apache. catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) at org.apache.catalina. valves.ErrorReportValve.invoke(ErrorReportValve.java:117) at org.apache.catalina.core. StandardValveContext.invokeNext(StandardValveContext.java:102) at org.apache.catalina.core. StandardPipeline.invoke(StandardPipeline.java:520) at org.apache.catalina.core.StandardEngineValve.invoke( StandardEngineValve.java:109) at org.apache.catalina.core.StandardValveContext.invokeNext( StandardValveContext.java:104) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java: 520) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929) at org.apache.coyote.tomcat5 .CoyoteAdapter.service(CoyoteAdapter.java:160) at org.apache.jk.server.JkCoyoteHandler.invoke( JkCoyoteHandler.java:296) at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:372) at org .apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:694) at org.apache.jk.common.ChannelSocket. processConnection(ChannelSocket.java:626) at org.apache.jk.common.SocketConnection.runIt(ChannelSocket .java:807) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:644) at java. lang.Thread.run(Unknown Source) | ||||||||
|
投稿日時: 2004-06-06 13:27
メッセージからドライバが取得できないためエラーになっていると思いますが、
ドライバのjarファイルを/FreeApp/WEB-INF/libに配置してみてもだめでしょうか? また、サーブレットではなく簡単な接続プログラムを作って実行しても同じような結果になるのでしょうか? | ||||||||
|
投稿日時: 2004-06-06 14:09
こんにちは。米山@クロノスです。
SQLException: No suitable driver というのは、適切なドライバーでない、もしくは接続URLが適切でない場合に出されるメッセージです。 # ドライバーが取得できていなければ、ClassNotFoundException がスローされるはずです。 そこで、接続URLですが、
jdbc:mysql///test・・・ のところはおかしくないですか? jdbc:mysql://test・・・ ではないでしょうか? [ メッセージ編集済み 編集者: 米山@クロノス 編集日時 2004-06-06 14:10 ] [ メッセージ編集済み 編集者: 米山@クロノス 編集日時 2004-06-06 14:12 ] | ||||||||
|
投稿日時: 2004-06-06 15:15
ぼんじぃ さん有難うございます。
amapです。 引用:(>で代用します。) >ドライバのjarファイルを/FreeApp/WEB-INF/libに配置してみてもだめでしょうか? 実は、私なりに "java.sql.SQLException: No suitable driver"で、Googleしまして、やってみましたが、だめでした。 http://testdrive.mapinfo.com/techsupp/miprod.nsf/kbase_by_product/164515985BC7713985256AF600552051 に記事があり、 Enterprise Manager appletがJDBC driver classesを発見できないためとの事で 私も、/FirstApp/WEB-INF/libに配置しましたが、結果は上記でした。 以下は、調べたサイトの抜粋です。 Answer: The above exception is being thrown because the Enterprise Manager applet cannot find the JDBC driver classes to access the targeted database. To resolve this problem, it is necessary to add the correct JDBC driver classes to the applet's classpath. Adding new classes to the classpath of the Enterprise Manager applet can be accomplished by placing their JAR files in the client directory of the Enterprise Manager's webapplication directory. For example, if the Enterprise Manager is installed within Tomcat3.2.2, and assuming TOMCAT_HOME = C:\tc322, then the JDBC driver JAR files should be placed in the following directory: c:\tc322\webapps\ems40\client. >また、サーブレットではなく簡単な接続プログラムを作って実行しても同じような結果になるのでしょうか? 理解不十分ですいません。Eclipseでjavaファイルを作成しコンパイルして、Eclipseのメニューから実行させてみるということでしょうか。未だ試していません。 米山@クロノス さん有難うございます。 >jdbc:mysql///test・・・ のところはおかしくないですか? >jdbc:mysql://test・・・ ではないでしょうか? 書籍のソースリストの誤植でした。本文記事には2つのスラッシュとなっていました。 しかし、この様に書き直しても"java.sql.SQLException: No suitable driver"が出てしまいました。 今のところ試行錯誤しております。 | ||||||||
|
投稿日時: 2004-06-06 16:22
米山さんの言うとおり
># ドライバーが取得できていなければ、ClassNotFoundException がスローされるはずです。 ですね。 私も気になっていましたがURLの指定がおかしいのではないかと思います。 私がJDBCを使用してMySQLと接続した場合は以下のようにURLを記述しました。 String url = "jdbc:mysql://サーバ名:ポート/データベース名"; そしてコネクションを作成する際にユーザIDとパスワードを指定しました。 (ユーザーIDとパスワードはURLでも指定できるみたいです) Connection con = DriverManager.getConnection(url, "ユーザID","パスワード"); MySQLへのJDBCを使った接続方法はいろいろとサンプルコードがあると思いますので調べてみてはいかがでしょう? | ||||||||
|
投稿日時: 2004-06-06 16:59
始めまして、カロンといいます。
String url = "jdbc:mysql///test?useUnicode=true&characterEncoding=SHIFT_JIS"; の部分なんですが、 String url = "jdbc:mysql:///test?useUnicode=true&characterEncoding=SHIFT_JIS"; では無いでしょうか? 見た感じサーバー名を指定しているようには見えないので。 | ||||||||
|
投稿日時: 2004-06-06 17:57
amapです。
先の発言で、誤植と書いてしまいましたが、 私の誤解でした。この場をお借りして 執筆者の丸の内 とら 氏 はじめ技術評論社の関係各位に深謝いたします。 本文を読みますと、 以降本文より抜粋。 ----------------------------------------------------------- 前略: MySQLサーバに接続するときのURLおよびオプションです。書式は jdbc:mysql://サーバ名/データベース名?オプション です。リスト1(ソースリスト)ではサーバ名を省略し、オプションも文字コードだけ指定しています。 後略: --------------------------------------------------------------------------- となっており、サーバ名を除いてスラッシュ3つと解釈されました。(3つで良いと思いました。) あわててしまい 米山@クロノス 様にも大変、御迷惑おかけしました。 申し訳ありません。 追伸、 ぼんじぃ 様、カロン様、御指導ありがとうございます。 上述の内容を投稿しようと思いましたら、新たに御指導を頂き、 あわてて、今まさに、理解しようとしているところです。 重ね重ね、申し訳ありません。勉強いたします。 | ||||||||
|
投稿日時: 2004-06-06 18:17
amapです。
大騒ぎして申し訳ありません。 私のタイピングミスで、皆様に大変御迷惑をおかけしました。 カロン様の御指摘どおりmysqlの後のコロン1つのタイピングミスが致命的でした。 申し訳ありませんでした。 無事、サーブレットからMySQLに接続できました。 皆様御指導誠に有難うございました。 追伸、 タイピングミスは恐ろしいものと痛感致しました。 (私の性格がおっちょこちょい。) | ||||||||
