質問編集履歴

1 sql_3のUPDATE文の誤りを修正しました

nyan_engineer

nyan_engineer score 28

2019/01/24 23:03  投稿

パラメータ値が見つからない時の処理
現在、社員情報の管理アプリケーションを作成しております。
社員情報の登録フォームで値を入力し、DAOクラスにてパラメータを取得してDBに登録するという処理を行いたいのですが、フォームで空の値(入力しなくても良い項目)があると処理が上手く行われません。
下記コード内だと、sql_1とsql_2は正常に処理されますが、sql_3については以下エラーにてはじかれます。
**MysqlDataTruncation: Data truncation: Incorrect date value: '' for column 'retire_date' at row 24**
```DAO
           String sql_1 = "INSERT INTO EMPLOYEE_INFO "
                   +"(NAME,NAME_HIRAGANA,BUSINESS_MANAGER,BIRTHDAY,SEX,MAIL_ADDRESS,TELEPHONE_NUMBER,COMPANY_INFO_ID,DEPARTMENT,COMMISSIONING_STATUS) "
                   +"VALUES (?,?,?,?,?,?,?,?,?,?);";
           String sql_2 = "INSERT INTO EMPLOYEE_STATE (EMPLOYEE_INFO_ID) "
                   +"SELECT LAST_INSERT_ID();";
           String sql_3 = "UPDATE EMPLOYEE_STATE "
                   +"SET ENTER_DATE = ?,RETIRE_DATE = ?,STATUS = ? "
                   +"WHERE EMPLOYEE_INFO_ID = "
                   +"(SELECT MAX(EMPLOYEE_ID) FROM "
                   +"(SELECT EMPLOYEE_ID FROM EMPLOYEE_INFO) AS TMP) "
                   +"OR IS NULL;";
                   +"(SELECT EMPLOYEE_ID FROM EMPLOYEE_INFO) AS TMP) ";
           //SQLを設定
           stmt_1 = conn.prepareStatement(sql_1);
           stmt_2 = conn.prepareStatement(sql_2);
           stmt_3 = conn.prepareStatement(sql_3);
           
           //空文字をNullに変換
           
           //パラメータをセット
           stmt_1.setString(1, employeeInfo.getName());
           stmt_1.setString(2, employeeInfo.getName_hiragana());
           stmt_1.setString(3, employeeInfo.getBusiness_manager());
           stmt_1.setString(4, employeeInfo.getBirthday());
           stmt_1.setString(5, employeeInfo.getSex());
           stmt_1.setString(6, employeeInfo.getMail_address());
           stmt_1.setString(7, employeeInfo.getTelephone_number());
           stmt_1.setString(8, employeeInfo.getCompany_info_id());
           stmt_1.setString(9, employeeInfo.getDepartment());
           stmt_1.setString(10, employeeInfo.getCommissioning_status());
           stmt_3.setString(1, employeeInfo.getEnter_date());
           stmt_3.setString(2, employeeInfo.getRetire_date());
           stmt_3.setString(3, employeeInfo.getStatus());
```
 
retire_dateが空の値であることが原因だと思われますが、この項目に関してはフォームで入力必須ではなく、空の値でも登録されるようにしたいです。
皆様のアドバイスを頂ければと思います。
  • Java

    17098 questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • MySQL

    7621 questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

  • JSP

    1132 questions

    JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

  • SQL

    3306 questions

    SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

  • servlet

    566 questions

    Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る