amino_plのプロフィール
- ベストアンサー数
- 1
- ベストアンサー率
- 50%
- お礼率
- 75%
- 登録日2013/09/24
- Prepared Statementがおかしい
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の中味が 捉えにくく解決できない状況です。 どなた、ヒントになるようなことがおわかりでしたら、ご指導下さい。 よろしくお願いします。
- Prepared Statementがおかしい
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の中味が 捉えにくく解決できない状況です。 どなた、ヒントになるようなことがおわかりでしたら、ご指導下さい。 よろしくお願いします。
- PHPとJavaでSHA256の結果を同じにしたい
PHPから JavaServletにアクセスするシステムを作っています。 その際にパラメーターの改ざん対策にハッシュを渡すようにしたいのですが PHPでSHA-256でハッシュ化した値と JavaでSHA-256でハッシュかした値が異なってしまいます。 PHPだとハッシュ化する際の秘密鍵を指定する項目がありますが Javaでは見つかりませんでしたので この項目が違うために結果が違うのだと予想していますが Javaが内部的に使っている秘密鍵はどこか取得できるのでしょうか? やりたいこととしてはPHPとJavaで同じハッシュが取得できるようにしたいのですが 良い案とかやり方あったら教えてください。 ◆php string hash_hmac ( string $algo , string $data , string $key [, bool $raw_output = false ] ) ◆Java DigestUtils.sha256Hex(string data) わかる方いましたら教えてください。よろしくお願いいたします。
- PHPとJavaでSHA256の結果を同じにしたい
PHPから JavaServletにアクセスするシステムを作っています。 その際にパラメーターの改ざん対策にハッシュを渡すようにしたいのですが PHPでSHA-256でハッシュ化した値と JavaでSHA-256でハッシュかした値が異なってしまいます。 PHPだとハッシュ化する際の秘密鍵を指定する項目がありますが Javaでは見つかりませんでしたので この項目が違うために結果が違うのだと予想していますが Javaが内部的に使っている秘密鍵はどこか取得できるのでしょうか? やりたいこととしてはPHPとJavaで同じハッシュが取得できるようにしたいのですが 良い案とかやり方あったら教えてください。 ◆php string hash_hmac ( string $algo , string $data , string $key [, bool $raw_output = false ] ) ◆Java DigestUtils.sha256Hex(string data) わかる方いましたら教えてください。よろしくお願いいたします。