
MySQLに対して検索する Prepared Statement について質問します。
現在、 Google App Engine(GAE) で動いていたJavaのアプリケーションを Amazon Web Service(AWS)
に移動すべく、ソースの見直しを行っています。
以下のソースを走らせると、GAEのローカルテスト環境では動くものの、AWSのローカルテスト環境では
エラーが出てしまいます。
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html");
response.setContentType("charset=utf-8");
PrintWriter out = response.getWriter();
try{
/** データベースへの接続を保持するConnectionクラス */
DBAccess dba = new DBAccess();
Connection conn = dba.getConnection();
PreparedStatement pstmt = null;
int staffId = Integer.parseInt(request.getParameter("staffId"));
String staffName = request.getParameter("staffName");
String staffSort = request.getParameter("staffSort");
String sql = "UPDATE first_tbl_staff SET staffName=?, staffSort=? WHERE staffId=?";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, staffName);
pstmt.setString(2, staffSort);
pstmt.setInt(2, staffId);
System.out.println("sql================" + sql);
int count = pstmt.executeUpdate(sql);
※※※←ここで落ちる
if(count == 1){
String res = "[";
res += "{\"staffId\":\"" + staffId + "\"}";
res += "]";
out.println(res);
}
pstmt.close();
conn.close();
} catch(Exception e){
System.out.println("例外発生:" + e );
}finally{
}
}
}
コンソールを見ると、以下のプリントアウト文と例外を出しています。
sql================UPDATE first_tbl_staff SET staffName=?, staffSort=? WHERE staffId=?
例外発生: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 '?, staffSort=? WHERE staffId=?' at line 1
簡単なUPDATE文ですので、文法的にも間違いないと思いますが、何度やってもGAEでは動作しますが、AWSではエラーとなってしまいます。
それぞれの開発環境ですが、同一のマシン(Windows7 32bit)に2つのEcripseを載せています。
【GAE】
・Eclipse3.7
・Java 6
・Jetty?
・App Engine SDK
・MySQL5.5.27
・jdbcドライバ:mysql-connector-java-5.1.26-bin.jar
【AWS】
・Eclipse4.3
・Java 7
・Tomcat 7
・AWS SDK
・MySQL5.5.27
・jdbcドライバ:mysql-connector-java-5.1.26-bin.jar
MySQLはローカルの同一のDB/テーブルを見に行ってます。
UPDATE文でエラーが出ますが、INSERT文でも同様にGAEでは通るのですがAWSではエラーになります。
因みにPrepared Statementオブジェクトではなく Statementオブジェクトを利用すると問題なく動きました。
丸1日かかっていろいろ環境を変えたりしていますが、Prepared Stateオブジェクトを利用すると、SQLの中味が
捉えにくく解決できない状況です。
どなた、ヒントになるようなことがおわかりでしたら、ご指導下さい。
よろしくお願いします。
No.3ベストアンサー
- 回答日時:
失礼しました。
>int count = pstmt.executeUpdate(sql);
を
int count = pstmt.executeUpdate();
でした。
amino_plさん、教えて頂いた通り
int count = pstmt.executeUpdate();
でエラーが出なくなり、ちゃんとアップデートできるようになりました。
確かに、
pstmt = conn.prepareStatement(sql);
って sql を引数にセットしておいて、更に
int count = pstmt.executeUpdate(sql);
はクドイですよね。
でも変ですねぇ?
Google App Engine では
pstmt = conn.prepareStatement(sql)
で問題なく通ってしまいます。
今再度やってみたのですがやっぱり通ってしまいました。
これって、Google App Engine のSDKがユルクて、AWSのSDKが厳密と
いうことでしょうか?
それともJava6とJava7の違いでしょうか?
理由はよくわかりませんけど、結果オーライです。
amino_plさん、本当にありがとうございました。
大助かりです。感謝の気持ちで一杯です。
ありがとうございました。
No.1
- 回答日時:
こんにちは。
確実に同じソースを利用しているのであればよくわかりませんが
pstmt.setString(1, staffName);
pstmt.setString(2, staffSort);
pstmt.setInt(2, staffId);
最後のpstmt.setInt(2,staffId)は
pstmt.setInt(3,staffId);
ではないでしょうか?
質問する際の転記ミスだったらスミマセン。
早速の回答ありがとうございました。
「staffSort」を削除してより単純なSQLにしたりいろいろやってみました。投稿するときそのときの変更が残ってしまったものと思われます。
実際のソースでは
pstmt.setInt(3,staffId);
となっています。
その意味では転記ミスです。
混乱させてゴメンナサイ
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Eclipseで、プロジェクト名のと...
-
エラー:org.springframeworkが...
-
構文エラーのやり直しについて
-
eclipseをバージョンアップした...
-
enum列挙子に使える文字列と使...
-
JBossについて
-
Eclipseの環境について
-
eclipseでのsvn認証エラー回避方法
-
Antでのビルドにエラー
-
エラーの内容を教えてください
-
Eclipse デバッグ エラー処理
-
Hot code replace failed ?
-
JSP NullPointerException
-
致命的: StandardServer.await:...
-
タグが閉じてないというエラー...
-
javaの超初歩
-
JSPで意味不明のコンパイルエラー
-
java.lang.StringIndexOutOfBou...
-
visual c++ CMapWordToObでクラ...
-
Buttonを配列とすることができ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Eclipseで、プロジェクト名のと...
-
タグが閉じてないというエラー...
-
tomcat起動時エラー
-
エラー:org.springframeworkが...
-
構文エラーのやり直しについて
-
eclipseでのsvn認証エラー回避方法
-
Eclipse デバッグ エラー処理
-
eclipseをバージョンアップした...
-
Javaのエラーについてです
-
コンパイル時にエラーが出てし...
-
JSP内でString型からint型に変...
-
JSP NullPointerException
-
eclipseのエラーについて質問で...
-
Eclipseの環境について
-
JSPで意味不明のコンパイルエラー
-
Eclipseで次のエラー箇所にジャ...
-
拡張子 class ファイルを開きた...
-
Buttonを配列とすることができ...
-
JBossについて
-
java return文を指定できません。
おすすめ情報