• 締切済み

Google Web Toolkit(GWT)でのMySqlの接続

こんにちは。現在GWT勉強中なのですが、MySqlの接続で大ハマリしています。どなたかご教示ください。 環境は以下のとおりです。 GWT:1.6.4 Eclipse:3.4.2 MySQL:5.1.31 MySQLConnector/J:5.1.7 EclipseでWeb Application Projectを作成し、デフォルトで作られる「GreetingServiceImpl」クラスの「public String greetServer(String input)」の中身を以下のように変更しました。 _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ public String greetServer(String input) { String msg = ""; try { Class.forName("com.mysql.jdbc.Driver").newInstance(); String url = "jdbc:mysql://localhost/gwt_samples"; String user = "root"; String password = "root"; Connection conn = DriverManager.getConnection(url, user, password); msg = "成功"; } catch(Exception e) { msg = "失敗"; } return msg; } _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ 初めはClass.forName()の行で「java.lang.ClassNotFoundException: com.mysql.jdbc.Driver」が発生していましたが、/war/WEB-INF/libにMySQLConnector/JのJARファイルを追加することで発生しなくなりました。 しかし今度は、DriverManager.getConnectionでおかしくなっているようなんですが、その行でステップ実行すると、「RPC.class」の「invokeAndEncodeResponse()」というメソッドの「catch InvocationTargetException e) 」のところまでジャンプしてしまいます。 どなたか分かる方教えてください。 また、不明点あればご指摘ください。

  • AJAX
  • 回答数2
  • ありがとう数3

みんなの回答

  • x_jouet_x
  • ベストアンサー率68% (162/236)
回答No.2

スタックトレースを拝見したところ、Exceptionが発生している根本の原因は java.lang.NoClassDefFoundError: Could not initialize class com.mysql.jdbc.ConnectionImpl のところだと思います。 つまり、実行時にcom.mysql.jdbc.Driverクラスは見つかったにも関わらず、com.mysql.jdbc.ConnectionImplクラスが何らかの理由で見つからなかったのでしょう。 もう1度実行環境、特にCLASSPATHを確認してみて下さい。 なお補足になりますが、hiro19834さんが変更されようとしているソースはサーバ側のソースですので、これはGoogle App Engine上で実行されていると思います。 App Engine上でJDBCを利用して直接DBアクセスする例は私も見たことがないので自信がありませんが、この場合JDO(Java Data Objects)経由でDBアクセスする必要があると思います。 JDO経由でもできるかどうか自信がありませんが・・・。

参考URL:
http://code.google.com/intl/ja/appengine/docs/java/gettingstarted/usingdatastore.html
hiro19834
質問者

お礼

x_jouet_xさん回答ありがとうございます。 ちょっと勉強不足だったようです。いろいろとキーワードを与えてくださってありがとうございます。勉強しなおしたいと思います。

  • x_jouet_x
  • ベストアンサー率68% (162/236)
回答No.1

AjaxやGWTではなく、JavaでのExceptionの話ですよね? InvocationTargetExceptionだけでは原因が特定できないので、 catch(Exception e) { msg = "失敗"; } と記述されているところを catch(Exception e) { e.printStackTrace(); } に変更して、これで実行時に表示される内容を教えて頂けないでしょうか?

hiro19834
質問者

補足

x_jouet_xさん、回答ありがとうございます。 「e.printStackTrace();」ですが、なぜか「catch(Exception e)」で例外をキャッチできておらず、質問に書いたように「RPC.class」までジャンプしてしまいます。 ですが出力には以下の内容が吐き出されておりました。 2009/05/09 23:50:58 com.google.appengine.tools.development.ApiProxyLocalImpl log SEVERE: [1241880658015000] javax.servlet.ServletContext log: Exception while dispatching incoming RPC call com.google.gwt.user.server.rpc.UnexpectedException: Service method 'public abstract java.lang.String connectsample.client.GreetingService.greetServer(java.lang.String)' threw an unexpected exception: java.lang.NoClassDefFoundError: Could not initialize class com.mysql.jdbc.ConnectionImpl at com.google.gwt.user.server.rpc.RPC.encodeResponseForFailure(RPC.java:360) at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:546) at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:166) at com.google.gwt.user.server.rpc.RemoteServiceServlet.doPost(RemoteServiceServlet.java:86) at javax.servlet.http.HttpServlet.service(HttpServlet.java:713) at javax.servlet.http.HttpServlet.service(HttpServlet.java:806) at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1093) at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084) at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360) at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181) at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:712) at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405) at com.google.apphosting.utils.jetty.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:54) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139) at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:306) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139) at org.mortbay.jetty.Server.handle(Server.java:313) at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:506) at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:844) at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:644) at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:205) at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:381) at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:396) at org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:442) Caused by: java.lang.NoClassDefFoundError: Could not initialize class com.mysql.jdbc.ConnectionImpl at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:282) at java.sql.DriverManager.getConnection(Unknown Source) at java.sql.DriverManager.getConnection(Unknown Source) at connectsample.server.GreetingServiceImpl.greetServer(GreetingServiceImpl.java:22) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:527) ... 25 more ちなみに「e.printStackTrace();」を追加してもしなくても出力されています。

関連するQ&A

  • MySQLとの接続について

    「GWTによるAjaxアプリケーション開発」を参考に勉強中なのですが、MySQLとの接続がうまくできません。 Class.forName("com.mysql.jdbc.Driver"); で、エラーになります。 mysql-connector-java-5.0.8-bin.jarが認識できていないようなのですが、「外部jarファイルの追加」で指定してあります。配置場所はC:\Program Files\Apache Software Foundation\common\libです。 エラー内容はEclipseのコンソールにも何も表示されないので、java.lang.System.out.println();を適当な場所に挿入して確認しました。 ソースコードは public void init() throws ServletException { try { Class.forName("com.mysql.jdbc.Driver"); connection = DriverManager.getConnection("jdbc:mysql:///friends?useUnicode=true&characterEncoding=UTF-8","",""); } catch(Exception e) {} } です。 どなたか、ご教示いただけないでしょうか、よろしくお願いいたします。

  • MySQLへの接続なんですが・・。

    下記にあるJAVAのソースファイルがあるのですが、コンパイルしてクラスファイルをつくり、実行してもうまくいきません。 windows2000Professional, j2sdk1.4.0_01, MySQL3.23.47 // uc/BaseJdbc.java import java.sql.* ; public class BaseJdbc { public static void main(String[] args) { final String LINE = "---------------------------------------\n" ; try { Class.forName("org.gjt.mm.mysql.Driver") ; // JDBCドライバ登録 System.out.println("\n" + LINE + "MySQLのJDBCドライバを登録。") ; Connection connection = DriverManager.getConnection( "jdbc:mysql://localhost:3306/river_data", "Administrator","lled") ; System.out.println("データベース「jdbc:mysql://localhost/" + "river_data」へ接続。") ; } } } 下記、コマンドプロンプトにて実行画面。 D:\azMySq\uc\BaseJdbc>java BaseJdbc --------------------------------------- MySQLのJDBCドライバを登録。 java.sql.SQLException: Invalid authorization specification: Access denied for us er: 'Administrator@localhost' (Using password: YES) at org.gjt.mm.mysql.MysqlIO.init(MysqlIO.java:330) at org.gjt.mm.mysql.Connection.connectionInit(Connection.java:261) at org.gjt.mm.mysql.jdbc2.Connection.connectionInit(Connection.java:89) at org.gjt.mm.mysql.Driver.connect(Driver.java:167) at java.sql.DriverManager.getConnection(DriverManager.java:512) at java.sql.DriverManager.getConnection(DriverManager.java:171) at BaseJdbc.main(BaseJdbc.java:20)

  • JDBCドライバの登録とデータベースとの接続のプログラムについて

    JAVAを使ってMySQLに接続したいのですが // JDBCドライバの登録 String driver = "org.gjt.mm.mysql.Driver"; // データベースの指定 String url = ".;%JAVA_HOME%\lib\tools.jar;mysql-connector-java-5.0.4-bin.jar"; String user = "root"; // 環境に応じて設定 String password = "ishi"; // 環境に応じて設定 Class.forName (driver); // データベースとの接続 con = DriverManager.getConnection(url, user, password); の部分がよくわかりません。研修先のパソコンではうまくできたのですが自宅のパソコンで実行環境を構築したところうまくいきません。 String userとString passwordの部分についてはMySQLで設定したものに設定しました。 String urlに関しても何か設定を変えなければいけないのでしょうか? また他に設定しなければならない部分があるのでしょうか?

    • ベストアンサー
    • Java
  • eclipse,mysql,javaエラー

    Class.forName("com.mysql.jdbc.Driver")が接続出来ません どなたかお教え頂けないでしょうか MySQLを再インストールしてもだめです 下記環境で動かしています。 eclipse-3.72 MySQL5.5.13,JDBC:4.0.0 mysql-connector-java5.1.17-bin.jar jdk.1.6.0_26 eclipseで 接続プロファイルを作成し、mysql-connector-java5.1.17-bin.jarを設定して 接続デスト pingが正常に完了しましたで問題がありません。 またjavaのビルド・パスにもmysql-connector-java5.1.17-bin.jarが有りますが javaを実行すると下記状態になります Class.forName("com.mysql.jdbc.Driver")が接続出来ません 下記が実行ソースプログラム import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import java.sql.*; public class test01 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{ response.setContentType("text/html; charset=Shift_JIS"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<head>"); out.println("<title>データベーステスト</title>"); out.println("</head>"); out.println("<body>"); out.println("<p>"); Connection conn = null; String url = "jdbc:mysql://localhost/testdb"; String user = "root"; String password = "test"; try { Class.forName("com.mysql.jdbc.Driver").newInstance(); out.println("ドライバのロードに成功しました<br>"); conn = DriverManager.getConnection(url, user, password); out.println("データベース接続に成功しました<br>"); }catch (ClassNotFoundException e){ out.println("ClassNotFoundException:" + e.getMessage()); }catch (SQLException e){ out.println("SQLException:" + e.getMessage()); }catch (Exception e){ out.println("Exception:" + e.getMessage()); }finally{ try{ if (conn != null){ conn.close(); out.println("データベース切断に成功しました"); }else{ out.println("コネクションがありません"); } }catch (SQLException e){ out.println("SQLException:" + e.getMessage()); } } out.println("</p>"); out.println("</body>"); out.println("</html>"); } }

    • ベストアンサー
    • Java
  • MySQLその他のコンピュータへの接続方法

    MySQL初心者です。接続するコードに関して質問させていただきます。 下記のコードを設定すると、自PCのデータベースに接続されますが、他のホストコンピュータのMySQLデータベースへ接続する際のコーディングはどのように設定すればよろしいでしょうか? 例えば、 自PC:192.168.1.201 接続先:192.168.1.202 Class.forName("org.gjt.mm.mysql.Driver"); String url = "jdbc:mysql:///******?useUnicode=true&characterEncoding=SJIS"; String user = "*****"; String pass = "********"; Connection con = DriverManager.getConnection(url,user,pass); ご指導のほどよろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • JavaからMySQLへの接続

    現在、JavaからMySQLへ接続してデータを抽出する 勉強をしております。 (MySQL Server4.1、ドライバはmysql-connector-java-2.0.14) どうも接続部分のコードがおかしいのか、 コードをいろいろ変えてみても、エラーになります。 //ドライバクラスをロード Class.forName("org.gjt.mm.mysql.Driver"); //データベースへ接続 String url = "jdbc:mysql:///hellodb?useUnicode=true&characterEncoding=SJIS") String user = "root"; String pass = "XXXX"; Connection con = DriverManager.getConnection(url,user,pass); ↓↓実行後のエラーメッセージです。 (java.sql.SQLException: Communication failure during handshake. Is there a server running on localhost:3306?) ちなみにコマンドプロンプトからMySQLのcardbに接続する際は mysql -u root hellodb -p とうてば接続できます。この前に mysqld --default-character-set=sjis のようなコードをうつことはありません。(エラーになってしまったので) 接続面で何か不備があるのでしょうか? JDBCドライバのjarファイルのクラスパスへの設定は済んであります。 どなたかわかるかたいらっしゃいましたら教えていただけると 助かります。 どうぞよろしくお願いいたします。

    • ベストアンサー
    • Java
  • Androidから外部DBサーバーへ接続(MySQL)

    現在、Androidのアプリで、ボタンを押下したらWindows上のMySQLサーバーに接続し、データを取得しようとしています。 しかし、どうしてもDBサーバーに接続できません。 Exceptionに飛んでしまいます。 どなたかご教授ください><; 【環境】 ・Windows Vista Home Premium ・eclipse 3.5上でAndroidをエミュレーション ・MySQL 5.1を使用 ・JDBCドライバは5.1を使用  プロジェクトの構成パスにJDBCを追加 【ソースコード(接続部分のみ)】 import java.sql.*; (中略) public void onClick(Veiw v) {   try {     Class.forName("com.mysql.jdbc.Driver);     Connection conn = DriverManager.getConnection("jdbc:mysql://localhost; DatabaseName=DBName;", "user", "pass");     Statement stmt = conn.createStatement();     (中略)   } catch (Exception ex) {     // エラー   } }

  • パッケージ org.gjt.mm.mysqlは存在しません

    いつもお世話になっております。 javaから、sqlを操作するプログラムを作っているのですが、 コンパイル時に「パッケージ org.gjt.mm.mysqlは存在しません」と、 エラーが発生してしまいます。 ソースコード----------------------- import java.sql.*; import org.gjt.mm.mysql.Driver; public class HelloWorldJDBCMySQL { public static void main(String[] args) { String user = "password"; String pass = "password"; try { // ドライバクラスをロード // Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); // ODBCの場合 Class.forName("org.gjt.mm.mysql.Driver"); // MySQLの場合 // データベースへ接続 // Connection con = // DriverManager.getConnection("jdbc:odbc:helloworld"); // ODBCの場合 // MySQLの場合 String url = "jdbc:mysql:///hellodb?useUnicode=true&characterEncoding=SJIS"; Connection con = DriverManager.getConnection(url,user,pass); // ステートメントオブジェクトを生成 Statement stmt = con.createStatement(); String sql = "SELECT * FROM test"; // クエリーを実行して結果セットを取得 ResultSet rs = stmt.executeQuery(sql); // 検索された行数分ループ while(rs.next()){ // nameを取得 String no = rs.getString("name"); // addressを取得 String lang = rs.getString("address"); // メッセージを取得 //String msg = rs.getString("MESSAGE"); // 表示 System.out.println(no + " " + lang ); } // データベースから切断 stmt.close(); con.close(); } catch (Exception e) { e.printStackTrace(); } } } ----------------------------------- 環境変数--------------------------- CLASSPATH .;C:\sample4\WEB-INF\lib\mysql-connector-java-5.1.12-bin.jar ----------------------------------- どなたか、ご教授いただけますでしょうか?

    • ベストアンサー
    • Java
  • MySQLでJDBC接続をTomcatで接続できないです。。。。

    JDBC接続を現在勉強しています。 そこで、eclipseの中にTomcatをプラグインして、javaからデータベースに接続を心みているのですが、エラーが出て自分なりにいろいろ試したのですが、どうしてもエラーが消えません。 ご指摘いただけたらと思います。 エラー内容 java.lang.ClassNotFoundException: com.mysql.jdbc.Driver 環境内容 windows xp professional Eclipse 3.3 (C:\eclipse) Tomcat 5.5 (C:\eclipse\servers\tomcat-5.5) java (C:\Program Files\Java\jdk1.6.0_06) MySQL (D:\mysql-5.0.67-win32 データベースはDドライブにおいています) JDBCドライバー mysql-connector-java-5.1.6-bin.jar(C:\eclipse\servers\tomcat-5.5\common\libの配下に設定) PATHの設定 CLASSPATH C:\eclipse\servers\tomcat-5.5\common\lib javaのソースコード import java.sql.*; public class JdbcMySQLTest { public static void main(String[] args) { try { // ドライバクラスをロード Class.forName("com.mysql.jdbc.Driver"); // MySQLの場合 // データベースへ接続 String url = "jdbc:mysql:///hellodb?useUnicode=true&characterEncoding=SJIS"; Connection con = DriverManager.getConnection(url); // ステートメントオブジェクトを生成 Statement stmt = con.createStatement(); String sql = "SELECT * FROM HELLO_WORLD_TABLE"; // クエリーを実行して結果セットを取得 ResultSet rs = stmt.executeQuery(sql); // 検索された行数分ループ while (rs.next()) { // NOを取得 int no = rs.getInt("NO"); // 言語を取得 String lang = rs.getString("LANGUAGE"); // メッセージを取得 String msg = rs.getString("MESSAGE"); // 表示 System.out.println(no + " " + lang + " " + msg); } // データベースから切断 stmt.close(); con.close(); } catch (Exception e) { e.printStackTrace(); } } } 上記コードをEclipseから実行しますとコンソール上に 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 jp.co.Beas.JdbcMySQLTest.main(JdbcMySQLTest.java:11) になってしまいます。 JdbcMySQLTest.java:11からcom.mysql.jdbc.Driverが ないですよ~といっているのは理解しているのですが そこでいろいろドライバーの配置などを変更したのですが エラーがやはりかわりません。 ながながとなって申し訳ございませんが、ご教授いただけたらと思います。

  • TomcatとMySQLが連携しなくなった?

    サーブレットを勉強しています。 勉強として、Eclipseを使ってWebアプリケーションを作っているのですが、なぜか以前まで連携していたMySQLと連携できなくなりました(DBにつながらなくなりました)。EclipseにMySQLドライバ(?)「mysql-connector-java-3.1.13-bin.jar」を入れて、やっています。 System.out.println(""); を使い、どこでエラー(try catchでcatchにいくところ)が出ているのかと調べると、 DriverManager.getConnection(DRIVER_URL,USER_NAME,PASSWORD); のところで、出ているようです。 何が原因として考えられるのでしょうか? よろしくお願いします。

専門家に質問してみよう