前提・実現したいこと
javaとOracleDatabaseとエクリプスを使用して簡単な社員管理システムを作っています。
UPDATE機能を実装中に以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
=== 社員管理システム ===
- 全件表示
- 登録
- 更新
- 削除
- 終了
メニュー番号を入力してください:3
社員ID1
社員名を入力してください。
hogehoge
性別を入力してください(男性:1、女性:2)。
1
生年月日を入力してください(西暦年/月/日)。
1998/03/11
部署ID(1:営業部、2:経理部、3:総務部):1
java.sql.SQLSyntaxErrorException: ORA-01747: user.table.column、table.columnまたは列指定が無効です
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:450) at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:399) at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:1017) at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:655) at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:249) at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:566) at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:215) at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:58) at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:943) at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1075) at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3820) at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:3897) at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeUpdate(OraclePreparedStatementWrapper.java:1361) at jp.co.sss.crud.db.DBController.update(DBController.java:131) at jp.co.sss.crud.main.MainSystem.main(MainSystem.java:72)
該当のソースコード
↓DBController
public static void update (String empId, String empName, String gender, String birthday, String deptId )
throws ClassNotFoundException, SQLException {
Connection connection = null;
PreparedStatement preparedStatement = null;
try {
// DBに接続
connection = DBManager.getConnection();
// ステートメントを作成
preparedStatement = connection.prepareStatement(ConstantSQL.SQL_UPDATE);
// 入力値をバインド
preparedStatement.setString(5, deptId);
preparedStatement.setString(1, empId);
preparedStatement.setString(2, empName);
preparedStatement.setString(3, gender);
preparedStatement.setString(4, birthday);
// SQL文を実行
int cnt = preparedStatement.executeUpdate();
System.out.println(cnt + "件のデータを更新しました。");
} catch (Exception e) {
e.printStackTrace();
} finally {
// クローズ処理
DBManager.close(preparedStatement);
DBManager.close(connection);
}
}
↓MainSystem
case 3:
// 更新する値を入力
System.out.print("社員ID");
String empId = br.readLine();
System.out.println("社員名を入力してください。");
empName = br.readLine();
System.out.println("性別を入力してください(男性:1、女性:2)。");
gender = br.readLine();
System.out.println("生年月日を入力してください(西暦年/月/日)。");
birthday = br.readLine();
System.out.print("部署ID(1:営業部、2:経理部、3:総務部):");
deptId = br.readLine();
// DBに接続
DBController.update(empId, empName, gender, birthday, deptId);
break;
↓ConstantSQL
public static String SQL_UPDATE = "UPDATE employee SET emp_id = ?, enm_name = ?, gender = ?, birthday = ?, WHERE dept_id = ?";
UPDATEの該当箇所のコードを抜粋してます。
試したこと
これと同じ形のDELETE機能は動いたので、何度も構文を呼んだのですが原因がわかりませんでした。
補足情報(FW/ツールのバージョンなど)
Java
エクリプス
JDBC