LoginSignup
0
0

More than 1 year has passed since last update.

テーブル更新時エラー 未完成

Last updated at Posted at 2021-12-01

コンソールアプリケーション:社員情報管理アプリ

Something went wrong

DBController.java

//更新機能
    public static void Javadoc_update(String empId ,String empName_up, String gender_up, String birthday_up,  String deptId_up)
        throws ClassNotFoundException, SQLException {
            Connection connection = null;
            PreparedStatement preparedStatement = null;


            try {

                //DBに接続
                connection = DBManager.getConnection();

                preparedStatement = connection.prepareStatement(ConstantSQL.SQL_UPDATE1);

                preparedStatement.setString(1, empName_up);
                preparedStatement.setString(2, gender_up);
                preparedStatement.setString(3, birthday_up);
                preparedStatement.setString(4, deptId_up);
                preparedStatement.setString(5, empId);

                //SQLの実行
                preparedStatement.executeUpdate();

                System.out.println("社員情報を更新しました");

            } finally {
                DBManager.close(preparedStatement);
                DBManager.close(connection);

            }

ConstantSQL.java

public class ConstantSQL {

//全てCASE文で記述した場合
public static String SQL_UPDATE1 = "UPDATE employee e SET \r\n"
            + "e.emp_name = (CASE WHEN e.emp_name IS NULL THEN e.emp_name WHEN e.emp_name IS NOT NULL THEN ? END),\r\n"
            + "e.gender = (CASE WHEN e.gender IS NULL THEN e.gender WHEN e.gender IS NOT NULL THEN ? END),\r\n"
            + "e.birthday = (CASE WHEN e.birthday IS NULL THEN e.birthday WHEN e.birthday IS NOT NULL THEN TO_DATE(?, 'YYYY-MM-DD') END),\r\n"
            + "dept_id = (CASE WHEN dept_id IS NULL THEN dept_id WHEN dept_id IS NOT NULL THEN ? END)\r\n"
            + "WHERE emp_id = ?";

//emp_nameのみCASE文で記述した場合
public static String SQL_UPDATE1 = "UPDATE employee e SET \r\n"
            + "e.emp_name = (CASE WHEN e.emp_name IS NULL THEN e.emp_name WHEN e.emp_name IS NOT NULL THEN ? END),\r\n"
            + "e.gender = ?, \r\n"
            + "e.birthday = ?, \r\n"
            + "dept_id = ?\r\n"
            + "WHERE emp_id = ?";




}

CASE文の説明

--CASEで条件をわけてSELECTする
SELECT 
 CASE 
  WHEN 条件1 THEN 条件1の結果
  WHEN 条件2 THEN 条件2の結果
  ELSE 条件1,2以外の結果
 END 
FROM table1;

全てCASE文で入力したとき

エラー文
java.sql.SQLSyntaxErrorException: ORA-00932:
データ型が一致しません: NUMBERが予想されましたがCHARです。

値を入力して更新しても入力しないで更新しても上記のエラーになる。

emp_nameのみCASE文で記述した場合

エラー文
java.sql.SQLException: ORA-01407:
("CONSOLE_CRUD_USER"."EMPLOYEE"."EMP_NAME")をNULLには更新できません。

値を入力しないで更新しないと上記のエラーになる。
ただしemp_nameに値を入れて更新するとエラーは発生せず更新できる。

別のパターン

同じようにbirthdayのみ、genderのみ、dept_idのみCASE文で記述した場合

エラー文
java.sql.SQLSyntaxErrorException: ORA-00932:
データ型が一致しません: NUMBERが予想されましたがCHARです。

いずれの場合も値を入力しないと上記のエラーになる。
または値を入力した場合にも同様のエラーになる。

参考記事

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0