前提
javaとmysqlを使って勤怠管理及び社員の情報を格納するシステムを作っています。
社員の情報を削除するプログラムを作成したのですがエラーが出ました。
しかし、WHERE文以外全く同じSQL文をA5:SQL mk-2 に入力したところ動きました。
実現したいこと
・文法エラーを訂正しプログラムが動くようにしたい。
発生している問題・エラーメッセージ
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 'INNER JOIN employee_pass b ON a.id = b.id LEFT OUTER JOIN employee_career c ' at line 1
該当のソースコード
java
1 2public void doDelete(int id) { 3 4 try { 5 Class.forName(DRIVER_NAME); 6 }catch(ClassNotFoundException e) { 7 e.printStackTrace(); 8 } 9 10 Connection con = null; 11 PreparedStatement ps = null; 12 boolean flg = true; 13 14 try { 15 16 con = DriverManager.getConnection(JDBC_URL,USER_ID,USER_PASS); 17 con.setAutoCommit(false); 18 19 StringBuffer buf = new StringBuffer(); 20 21 buf.append(" DELETE"); 22 buf.append(" FROM "); 23 buf.append(" employee_info a "); 24 buf.append(" INNER JOIN employee_pass b ON "); 25 buf.append(" a.id = b.id "); 26 buf.append(" LEFT OUTER JOIN "); 27 buf.append(" employee_career c ON a.id = c.id "); 28 buf.append(" INNER JOIN "); 29 buf.append(" division d ON c.division_id = d.id "); 30 buf.append(" INNER JOIN "); 31 buf.append(" branch e ON c.branch_id = e.id "); 32 buf.append(" WHERE "); 33 buf.append(" a.id = ? "); 34 35 36 ps = con.prepareStatement(buf.toString()); 37 ps.setInt(1, id); 38 39 40 41 ps.executeUpdate(); 42 System.out.println("削除成功"); 43 44 45 }catch(SQLException e) { 46 e.printStackTrace(); 47 flg = false; 48 System.out.println("削除失敗"); 49 }finally{ 50 51 if (ps != null) { //接続が確認できている場合のみ実施 52 try { 53 ps.close(); //接続の解除 54 } catch (SQLException e) { 55 e.printStackTrace(); 56 } 57 } 58 59 //Connectionオブジェクトの接続解除 60 if (con != null) { //接続が確認できている場合のみ実施 61 try { 62 con.close(); //接続の解除 63 } catch (SQLException e) { 64 e.printStackTrace(); 65 } 66 } 67 } 68 69 } 70
以下が使用テーブルの概要です
SQL
1CREATE TABLE EMPLOYEE_INFO( 2 ID INT AUTO_INCREMENT NOT NULL PRIMARY KEY COMMENT "ID", 3 NAME VARCHAR(10) NOT NULL COMMENT "名前", 4 AGE INT NOT NULL COMMENT "年齢", 5 BIRTH DATE NOT NULL COMMENT "生年月日", 6 GENDER INT NOT NULL COMMENT "性別" 7 8 9); 10 11CREATE TABLE EMPLOYEE_CAREER( 12 ID INT NOT NULL PRIMARY KEY, 13 STARTING_DATE DATE NOT NULL COMMENT "入社日", 14 DIVISION_ID INT NOT NULL COMMENT "所属部署", 15 RETIRERING_DATE DATE COMMENT "退社日", 16 BRANCH_ID INT NOT NULL COMMENT "所属支店" 17); 18 19CREATE TABLE DIVISION( 20 21 ID INT NOT NULL PRIMARY KEY, 22 DIVISION_NAME VARCHAR(10) NOT NULL COMMENT "部署" 23 24); 25 26CREATE TABLE BRANCH( 27 28 ID INT NOT NULL PRIMARY KEY, 29 BRANCH_NAME VARCHAR(10) NOT NULL COMMENT "支店" 30 31); 32 33CREATE TABLE EMPLOYEE_PASS( 34 ID INT NOT NULL PRIMARY KEY, 35 PASSWORD VARCHAR(30) NOT NULL COMMENT "パスワード"); 36 37INSERT INTO EMPLOYEE_INFO( 38 NAME, AGE, BIRTH, GENDER 39 )VALUES( 40 "MONA", 25, "1997-05-12", 2 41 ) 42 43INSERT INTO EMPLOYEE_CAREER( 44 ID, STARTING_DATE, DIVISION_ID, BRANCH_ID 45 )VALUES( 46 1, "2020-11-04", 1, 3 47 );
試したこと
・引数のidに数値がちゃんと入力されているかを確認。
・テーブル名などのタイポを確認。
補足情報(FW/ツールのバージョンなど)
eclipse Version: 2021-12 (4.22.0)
MySQL Ver 8.0.29 for Win64 on x86_64 (MySQL Community Server - GPL)





回答2件
あなたの回答
tips
プレビュー