アプリ版:「スタンプのみでお礼する」機能のリリースについて

基本的な質問ですいません。

jspで画面から入力した内容をDB接続してInsertするようにしたいのですが、
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '?,?,?,?,?,?,?,?,?,0,'login','login'From employee_info' at line 1

上記のようなエラーが表示されてしまいます。
調べたらSQLの文で出るエラーということでしたので一度、上記の?の部分を
DBに保存できるような値を入力してDBで直接SQLを流したのですが、
その時には問題なくDBにInsertすることが出来ましたので、画面からできない理由が
よくわからないです。
詳しいかたがいらっしゃいましたらご教授お願いいたします。

因みにDAOで使用しているSQLは以下のようになります。

String Insertsql =
"INSERT INTO company.employee_info
(employee_id, name, name_hiragana,birthday,sex,mail_address,company_info_id,business_manager,department,commissioning_status,is_deleted,created_id,modified_id)
SELECT COALESCE(MAX(employee_id)+1,1),?,?,?,?,?,?,?,?,?,0,'login','login'From employee_info";

PreparedStatement pStmt = conn.prepareStatement(Insertsql);
pStmt.setString(1,employee_model.getName());
pStmt.setString(2,employee_model.getName_hira());
pStmt.setString(3,employee_model.getBirthday());
pStmt.setInt(4,employee_model.getSex());
pStmt.setString(5,employee_model.getMail_address());
pStmt.setString(6,employee_model.getCompany());
pStmt.setString(7,employee_model.getBusiness_manager());
pStmt.setInt(8,employee_model.getDepartment());
pStmt.setInt(9,employee_model.getCommissioning_status());

//Insert文を実行

pStmt.executeUpdate(Insertsql);

質問者からの補足コメント

  • つらい・・・

    回答ありがとうございます。
    一度、insert into ~ selectで一発で決めるのをやめて以下のSQLを記載して実践してみました。
    INSERT INTO company.employee_info (name, name_hiragana,birthday,sex,mail_address,company_info_id,business_manager,department,commissioning_status,is_deleted,created_id,modified_id) VALUE( ?,?,?,?,?,?,?,?,?,0,'login','login')

    ですが、また同じエラーが発生しましたのでよく見たらcompany_info_idがDBでint型でしたので
    BEAN、その他をint型に修正

    別のエラー(例外)が発生。

    No.1の回答に寄せられた補足コメントです。 補足日時:2017/09/07 17:40
  • つらい・・・

    例外の内容は
    The server encountered an internal error that prevented it from fulfilling this request.

    例外
    java.lang.NumberFormatException: For input string: ""
    java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    java.lang.Integer.parseInt(Integer.java:592)
    java.lang.Integer.valueOf(Integer.java:766)
    servlet.InsertServlet.doPost(InsertServlet.java:35)

    これはSQLが悪いのか教えてほしいです。

      補足日時:2017/09/07 17:44

A 回答 (2件)

>これはSQLが悪いのか教えてほしいです


これはよラーの示す通り、JSPで入力した文字列を数に
変換しているところでしょうね。
    • good
    • 0
この回答へのお礼

String型に戻して再確認しました。
単純にInsert文の実行時に
「pStmt.executeUpdate();」と書くところを
「pStmt.executeUpdate(Insertsql);」と書いておりました。
ご回答いただきありがとうございました。

お礼日時:2017/09/11 10:21

パラメタライズドSQLだと、?の位置に制約があるので、それかも


しれません。動的SQLで組んでみては?

動的とは要するにパラメータを文字列としてプログラムで
SQLに埋め込むと言うことです。

SQLインジェクション対策が必要です。

また、insert into ~select で一発で決めようとしなければ
やりようが有るでしょう。
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!