• 締切済み

mysqlのgetConnectionでエラー

Javaプログラムからmysqlにつなげようとして以下のコードを書いたのですが、getConnection部分でエラーになってしまいます。 Connection con = null; try{ Class.forName("com.mysql.jdbc.Driver"); }catch(ClassNotFoundException e) { e.printStackTrace(); } try{ con = DriverManager.getConnection("jdbc:mysql://127.0.0.1/DB名", user名, パスワード); }catch(SQLException e){ e.printStackTrace(); } 環境は、 OS:ubuntu9.04 mysql:5.0.75-0ubuntu10.2(apt-getで入れたまま) です。 具体的なエラーメッセージは、 com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '????????????????' at line 1 となっていて、????????が気になります。 今まで普通に動いていたプログラムなのでコードの間違いでは無いと思うのですが、色々調べたものの解決しませんでした。 どなたか解決方が分かりましたら教えて下さい。

  • Java
  • 回答数1
  • ありがとう数0

みんなの回答

noname#94983
noname#94983
回答No.1

エラーからすると、SQLのクエリーがおかしいぞ、といっているようだ。実行しているクエリーのテキストを再チェックする。near '????????????????'となっているのを見ると、どうも日本語や2バイト文字でクエリーが書いてあるとか、そういった問題のようにもみえるが……。どこか間違えて書き換えて保存してしまった、というようなことじゃないだろうか。

ruu4869
質問者

補足

回答いただきありがとうございます。 私も文字コードまわりが怪しい気がして、 eclipseでワークスペースの文字コードをutf-8に、 mysqlでcreate database Hoge default character set utf8; としてvarcharのstrしかないtest表を作り、そこに'hoge'という文字をセットして "select str from test"というクエリを投げてみたのですが、やはり同じエラーが出てしまいました。 そもそも試しとして'hoge'という1バイト文字を入れたのにこのエラーが出てしまうのは謎です。。

関連するQ&A

  • javaからmysqlに接続ができません。

    よろしくお願いします。 JavaからMySqlに接続ができなくて困っています。 <環境> OS:Windows XP JDK : jdk1.6.0_02 JDBC Driver for MySQL : mysql-connector-java-5.1.5-bin.jar Java、MySql単体では正常に動作しているようですが、ドライバを認識できず、JavaからMySqlに接続することができません。 ---コード------------------------------------------ import java.net.*; import java.sql.*; public class SqlSample1{ String url = "jdbc:mysql://localhost/test_db"; String user = "root";//ユーザ名 String pass = "admin";//パスワード Connection con = null; //コンストラクタ public SqlSample1(){ init();//初期化 fin();//終了 } //初期化 public void init(){ try{ //ドライバのロード Class.forName("org.gjt.mm.mysql.Driver"); //MySQLサーバへの接続 con = DriverManager.getConnection(url,user,pass); System.out.println("Connected!!"); }catch(SQLException e){ System.err.println("SqlException:\n"+e.toString()); }catch(Exception e){ e.printStackTrace(); } } //終了:開放 public void fin(){ try{ con.close(); System.out.println("Closed."); }catch(SQLException e){ System.err.println("SqlException:\n"+e.toString()); }catch(Exception e){ e.printStackTrace(); } } public static void main(String args[]){ SqlSample1 ss1=new SqlSample1(); } } ----------------------------------------------------------- ----エラーメッセージ--------------------------------------- SqlException: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:Communications link failure Last packet sent to the server was 0 ms ago. java.lang.NullPointerException at SqlSample1.fin(SqlSample1.java:41) at SqlSample1.<init>(SqlSample1.java:18) at SqlSample1.main(SqlSample1.java:53) ------------------------------------------------------------ ※C:\mysql-connector-java-5.1.5の下のmysql-connector-java-5.1.5-bin.jarファイルにCLASSPATHを設定しています。 初心者のためへたくそな質問になっているかもしれません。 申し訳ありません。 上記の情報が不十分な場合はご指摘をお願い致します。

  • JSPからMySQLへアクセスできません・・

    JSPでMySQLにアクセスしたいのですが、下記のエラーが解決できません・・・ Exception名等で検索をかけても、非常に件数が少なくて困っています。 エラーはかなり行数が多いので先頭から少し載せてみます。 com.mysql.jdbc.exceptions.MySQLNonTransientConnectionException: Server connection failure during transaction. Due to underlying exception: 'com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' 醇A 醇A ' at line 1'. ** BEGIN NESTED EXCEPTION ** com.mysql.jdbc.exceptions.MySQLSyntaxErrorException MESSAGE: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' 醇A 醇A ' at line 1 STACKTRACE: com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' 醇A 醇A ' at line 1 at 環境はWINDOWSXP、TOMCAT5,5、MySQL4.1です。 学校の課題でJSPとMySQLを用いたWebアプリケーションを構築しており、 時間が足りないので、家でも開発を進めようと思ったのですが、先に進めません。 Webアプリケーションの構造はtomcatディレクトリ/webapps/website/内に、regist.jsp、regist.html、login.jsp、login.htmlが、 ./WEB-INF/classes/myAuth/内にAuthModule.javaというファイルがあり、jspからAuthModuleをimportして使用しています。 学校のPC環境はVineLinuxで、tomcatのversionは不明です、MySQLは4.0でした。 学校のPCではうまく実行でき、データベースにアクセスできることが確認できています。 非常にエラーの部分が見づらいとは思いますが、なんとか解決の糸口を教えていただけませんか・・

    • ベストアンサー
    • Java
  • returnの際のエラーについて

    こんにちは。皆様に教えていただきたいことがあります。 Beanクラスの中で、DBにアクセスするメソッドを作ったのですが、コンパイルエラーになるのです。 public Statement getStatement(){ try{  Class.forName(rb.getString("jdbc"));  Connection db=DriverManager.getConnection(rb.getString("con"),rb.getString("con1"),rb.getString("con2"));  Statement st = db.createStatement(); }catch(SQLException e){  e.printStackTrace(); }catch(ClassNotFoundException a){  a.printStackTrace(); }  return st; } ResourceBundleに、接続するためのドライバーの名称などを記述してDB(アクセスです)にアクセスしているのですが、下記のようなエラーが出ます。 FileBean.java:41: シンボルを解釈処理できません。 シンボル: 変数 st 位置 : BeanClass.FileBean の クラス return st; ^ エラー 1 個 try文の中でreturnしているわけじゃないのに、何故でしょう? どなたかお分かりになる方、ご教示くださいませ<(_ _)>

    • ベストアンサー
    • Java
  • JAVAからMYSQL使用時のキャッシュ無効化方法

    以下のようにJAVAからMYSQLを使っています。 しかし、30秒おきに使用しているSQL文の結果がDBを更新してもかわりません。 おそらく、javaまたはMYSQLでキャッシュが残っているためだと思うのですが、その無効化方法がわかりません。 その無効化方法のご教授をお願い申し上げます。 //MYSQLの各種設定 public onlineCycleChkDao() { // JDBCドライバの指定 this.driver = "com.mysql.jdbc.Driver"; // データベースの指定 this.server = "xxxx"; // MySQLサーバ ( IP または ホスト名 ) this.dbname = "xx"; // データベース名 this.url = "jdbc:mysql://" + server + "/" + dbname + "?useUnicode=true&characterEncoding=UTF8"; this.user = "xxxxxx"; // データベース作成ユーザ名 this.password = "xxxxxx"; // データベース作成ユーザパスワード DBcon(); try{ stmt = con.createStatement(); } catch(SQLException e){ System.err.println("SQL failed."); e.printStackTrace(); System.exit(2); } } private void DBcon(){ try{ // JDBCドライバの登録 Class.forName(this.getDriver()); // データベースとの接続 con = DriverManager.getConnection(getUrl(), getUser(), getPassword()); con.setAutoCommit(false); } catch(SQLException e){ System.err.println("SQL failed."); e.printStackTrace(); System.exit(2); } catch(ClassNotFoundException ex){ ex.printStackTrace(); System.exit(2); } } public void closeConnection(){ // コネクション切断 try{ con.close(); } catch(SQLException e) { System.out.println("MySQL Close error."); } } //サイクルSQL private long selectMaxSeqNo(String table){ long maxSeqNo = -1; try{ ResultSet rs; String sql; sql = "SELECT SQL_NO_CACHE SEQ_NO, NOW() FROM " + table ; //ここの取得結果が更新されません。対象テーブルは他のプログラムにて更新 sql += " ORDER BY RGST_TIME DESC limit 1;"; rs = stmt.executeQuery(sql); System.out.println(sql); while(rs.next()){ maxSeqNo = rs.getInt("SEQ_NO"); } rs.close(); } catch(SQLException e){ System.err.println("SQL failed."); e.printStackTrace(); System.exit(2); } System.out.println("seqNo:" + maxSeqNo); return(maxSeqNo); } public ArrayList<Long> selectMaxSeqNoList(){ //対象テーブルから最新のシーケンスNoリストを取得する。 ArrayList<Long> seqNoList = new ArrayList<Long>(); for(String Table : TableList){ //最新のシーケンスNo取得 long recentSeqNo = selectMaxSeqNo(Table); seqNoList.add(recentSeqNo); } return(seqNoList); }

    • ベストアンサー
    • Java
  • EclipseでMySQLにDELETE文を二つまとめて送れない

    環境 WindowsXP Eclipse3.4 MySQL5.1 Server str="DELETE FROM table1 where id=28;DELETE FROM table2 where id=28";という文を実行したのですが 動作しなくて困っています。分かる方がいましたら教えてください。 よろしくお願いします。 st.executeUpdate(str);を利用し、DELETE文ひとつの場合は実行できました。 MySQLServerに直接入力しても実行できました。 しかしEclipseから読み込んで実行すると com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DELETE FROM table2 where id=28' at line 1 というエラーがでてわかりません。 分かる方がいましたらよろしくお願いします。

    • ベストアンサー
    • Java
  • MySQLのエラー

    はじめまして。 MySQLでエラーが出てしまい改善するのに困っています。 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near... とでます。 「よくわかるPHPの教科書(P202)」という本を見ながらすすめているのですが、 このエラーが言っているのは、 「サーバーのバージョンが本と異なるから、あなたのサーバーにあわせたコマンド入力をしなさい」 ってことなのでしょうか? よろしくお願い致します。

  • MySQLでのエラー

    MySQLのコマンド画面で、データベースを作成しています。 そこで、WEB上を参考にして打ち込んでみたところ ERROR 1064: You have an error in your SQL syntax. Check the manual that corresp onds to your MySQL server version for the right syntax to use near ')' at line 1 とでます。 僕が打ち込んだ文は以下のとおりです。 mysql> create database odinms; です。 間違いなどがあればご指摘お願いします。

  • getConnection( )メソッドの戻り値

    御世話になります。 下記のプログラムで「型 Connectionの結果を戻す必要があります」 とエラーが出てしまうのですが、原因が分からず困っております。 過去ログをみても分からなかった為、ご教示いただけます様 宜しく御願い致します。 package info.aaaa; import java.sql.Connection; import java.sql.DriverManager; public class DBManager{ public static Connection getConnection(){ try{ Class.forName("org.gjt.mm.mysql.Driver").newInstance(); String url = "jdbc:mysql://localhost/aaaa?useUnicode=true&amp;characterEncoding=SJIS"; Connection con = DriverManager.getConnection(url,"cccc","vvvv"); return con; } catch(Exception e){ } } public static void main(String args[]) throws Exception{ Connection con = getConnection(); System.out.println("con=" + con); con.close(); } }

    • ベストアンサー
    • Java
  • 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) {} } です。 どなたか、ご教示いただけないでしょうか、よろしくお願いいたします。

  • forward()でエラーが出て対応ができません。

    どなたか、教えてください。 サーブレットからDBに接続して、検索条件(名前)が一致しているレコードを取得。 request.setAttribute リクエストデータにその人の住所をセットし、別のjspファイルに送り 表示するプログラムなんですが。 getServletConfig().getServletContext().getRequestDispatcher("/jsp/result1.jsp").forward(request, response);の部分で、コミット済みというエラーが発生します。 下記がそのプログラムです。 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws     ServletException, IOException {      request.setCharacterEncoding("windows-31J");      String name = request.getParameter("name1");      Connection con=null;;      PreparedStatement ps =null;  try{       Context context = new InitialContext();     DataSource ds =(DataSource)context.lookup("java:comp/env/jdbc/FrameWork");     con = ds.getConnection();     ps = con.prepareStatement("SELECT * FROM address where name like ?;");     ps.setString(1, name);     ResultSet rs = ps.executeQuery();    rs.next();    String address =rs.getString("address");   request.setAttribute("address1", address);    rs.close();    ps.close(); }catch(Exception e){ e.printStackTrace(); }finally{ try{ con.close();             }catch(SQLException e){e.printStackTrace();} }     try{ getServletConfig().getServletContext().getRequestDispatcher ( "/jsp/result1.jsp").forward(request, response);       }catch(Exception e){System.out.print(e);} } } エラーにも関わらず、ページは切り替わるのですが、アドレスはNULL値が表示されます。 一応、デバックをしてSQLの取得、リクエストデータのセットまでは、問題ないのは確認済みです。 乱文でわかりづらいのですが、どなたかお願いいたします。

専門家に質問してみよう