diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..50e9bd0 --- /dev/null +++ b/.classpath @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ae3c172 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/bin/ diff --git a/.project b/.project new file mode 100644 index 0000000..ccaa13e --- /dev/null +++ b/.project @@ -0,0 +1,23 @@ + + + em-jdbc + + + + + + org.eclipse.wst.validation.validationbuilder + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.wst.jsdt.core.jsNature + + diff --git a/.settings/.jsdtscope b/.settings/.jsdtscope new file mode 100644 index 0000000..cca691f --- /dev/null +++ b/.settings/.jsdtscope @@ -0,0 +1,7 @@ + + + + + + + diff --git a/.settings/org.eclipse.wst.jsdt.ui.superType.container b/.settings/org.eclipse.wst.jsdt.ui.superType.container new file mode 100644 index 0000000..49c8cd4 --- /dev/null +++ b/.settings/org.eclipse.wst.jsdt.ui.superType.container @@ -0,0 +1 @@ +org.eclipse.wst.jsdt.launching.JRE_CONTAINER \ No newline at end of file diff --git a/.settings/org.eclipse.wst.jsdt.ui.superType.name b/.settings/org.eclipse.wst.jsdt.ui.superType.name new file mode 100644 index 0000000..11006e2 --- /dev/null +++ b/.settings/org.eclipse.wst.jsdt.ui.superType.name @@ -0,0 +1 @@ +Global \ No newline at end of file diff --git a/mysql-connector-j-8.0.32.jar b/mysql-connector-j-8.0.32.jar new file mode 100644 index 0000000..184327c Binary files /dev/null and b/mysql-connector-j-8.0.32.jar differ diff --git a/src/com/rhizome/example/dao/EmployeeDAO.java b/src/com/rhizome/example/dao/EmployeeDAO.java index ef63c49..93b44b5 100644 --- a/src/com/rhizome/example/dao/EmployeeDAO.java +++ b/src/com/rhizome/example/dao/EmployeeDAO.java @@ -12,7 +12,9 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; +import java.util.Scanner; +import com.rhizome.example.dto.EmployeeDTO; import com.rhizome.example.util.DbUtil; public class EmployeeDAO { @@ -48,19 +50,25 @@ public class EmployeeDAO { * @throws SQLException * @throws ClassNotFoundException */ - public List selectAll() throws SQLException, ClassNotFoundException { - List rtnList = new ArrayList<>(); + public List selectAll() throws SQLException, ClassNotFoundException { + List rtnList = new ArrayList<>(); StringBuilder sql = new StringBuilder(); sql.append(" SELECT "); sql.append(" " + "*"); sql.append(" FROM "); sql.append(" " + TBL_NAME); try { - this.stmt = con.prepareStatement(sql.toString()); rs = stmt.executeQuery(); while (rs.next()) { - rtnList.add(rs.getString(NM_EMPLOYEE)); + EmployeeDTO employee = new EmployeeDTO(); + employee.setIdEmployee(rs.getInt(ID_EMPLOYEE)); + employee.setNmEmployee(rs.getString(NM_EMPLOYEE)); + employee.setKnEmployee(rs.getString(KN_EMPLOYEE)); + employee.setMailaddress(rs.getString(MAIL_ADDRESS)); + employee.setPassword(rs.getString(PASSWORD)); + employee.setIdDepartment(rs.getInt(ID_DEPARTMENT)); + rtnList.add(employee); } } finally { DbUtil.closeStatement(this.stmt); @@ -68,4 +76,137 @@ public class EmployeeDAO { return rtnList; } + /** + * 社員テーブルから指定された社員IDに一致するデータを全件取得する + * + * @return 検索結果 + * @throws SQLException + * @throws ClassNotFoundException + */ + public List selectById(int idEmployee) throws SQLException, ClassNotFoundException { + List rtnList = new ArrayList<>(); + StringBuilder sql = new StringBuilder(); + sql.append(" SELECT "); + sql.append(" " + "*"); + sql.append(" FROM "); + sql.append(" " + TBL_NAME); + sql.append(" WHERE "); + sql.append(" " + ID_EMPLOYEE + " = " + "?"); + try { + this.stmt = con.prepareStatement(sql.toString()); + stmt.setInt(1,idEmployee); + rs = stmt.executeQuery(); + int nRecords = 0; + while (rs.next()) { + EmployeeDTO employee = new EmployeeDTO(); + employee.setIdEmployee(rs.getInt(ID_EMPLOYEE)); + employee.setNmEmployee(rs.getString(NM_EMPLOYEE)); + employee.setKnEmployee(rs.getString(KN_EMPLOYEE)); + employee.setMailaddress(rs.getString(MAIL_ADDRESS)); + employee.setPassword(rs.getString(PASSWORD)); + employee.setIdDepartment(rs.getInt(ID_DEPARTMENT)); + rtnList.add(employee); + nRecords++; + } + if (nRecords==0) { + System.out.println("入力された値で情報がみつかりませんでした"); + } + } finally { + DbUtil.closeStatement(this.stmt); + } + return rtnList; + } + + /** + * 社員テーブルから指定された社員IDに一致するデータを削除する + * + * @throws SQLException + * @throws ClassNotFoundException + */ + public void empDelete(int idEmployee) throws SQLException, ClassNotFoundException { + if (selectById(idEmployee).size()!=0) { + StringBuilder sql = new StringBuilder(); + sql.append(" DELETE FROM "); + sql.append(" " + TBL_NAME); + sql.append(" WHERE "); + sql.append(" " + ID_EMPLOYEE + " = " + "?"); + System.out.println("指定されたIDの情報を削除しますか? Y/y"); + System.out.println("(Y/y以外の入力であればキャンセル)"); + Scanner sc = new Scanner(System.in); + String flag = sc.nextLine(); + if (flag.equals("Y")||flag.equals("y")) { + try { + this.stmt = con.prepareStatement(sql.toString()); + stmt.setInt(1,idEmployee); + stmt.executeUpdate(); + System.out.println("削除が完了しました"); + } finally { + DbUtil.closeStatement(this.stmt); + } + } + } + } + + /** + * 社員テーブルに指定された情報を新規登録する + * + * @throws SQLException + * @throws ClassNotFoundException + */ + public void empInsert(String name, String kn, String mailaddress, String password, int idDepartment) throws SQLException, ClassNotFoundException { + StringBuilder sql = new StringBuilder(); + sql.append(" INSERT INTO "); + sql.append(" " + TBL_NAME); + sql.append(" ("+NM_EMPLOYEE+", "+KN_EMPLOYEE+","+MAIL_ADDRESS+","+PASSWORD+","+ID_DEPARTMENT+") "); + sql.append(" VALUES "); + sql.append(" (?, ?, ?, ?, ?) "); + try { + this.stmt = con.prepareStatement(sql.toString()); + stmt.setString(1,name); + stmt.setString(2,kn); + stmt.setString(3,mailaddress); + stmt.setString(4,password); + stmt.setInt(5,idDepartment); + stmt.executeUpdate(); + System.out.println("登録が完了しました"); + } finally { + DbUtil.closeStatement(this.stmt); + } + } + + /** + * 社員テーブルの指定された社員IDに一致するデータを引数の内容に更新する + * + * @throws SQLException + * @throws ClassNotFoundException + */ + public void empUpdate(int idEmployee, String name, String kn, String mailaddress, String password, int idDepartment) throws SQLException, ClassNotFoundException { + if (selectById(idEmployee).size()!=0) { + StringBuilder sql = new StringBuilder(); + sql.append(" UPDATE "); + sql.append(" " + TBL_NAME); + sql.append(" SET "); + sql.append(" "+NM_EMPLOYEE+" = ?"+","); + sql.append(" "+KN_EMPLOYEE+" = ?"+","); + sql.append(" "+MAIL_ADDRESS+" = ?"+","); + sql.append(" "+PASSWORD+" = ?"+","); + sql.append(" "+ID_DEPARTMENT+" = ?"); + sql.append(" WHERE "); + sql.append(" " + ID_EMPLOYEE + " = " + "?"); + try { + this.stmt = con.prepareStatement(sql.toString()); + stmt.setString(1,name); + stmt.setString(2,kn); + stmt.setString(3,mailaddress); + stmt.setString(4,password); + stmt.setInt(5,idDepartment); + stmt.setInt(6,idEmployee); + stmt.executeUpdate(); + System.out.println("更新が完了しました"); + } finally { + DbUtil.closeStatement(this.stmt); + } + } + } + } diff --git a/src/com/rhizome/example/dto/EmployeeDTO.java b/src/com/rhizome/example/dto/EmployeeDTO.java new file mode 100644 index 0000000..23cacb7 --- /dev/null +++ b/src/com/rhizome/example/dto/EmployeeDTO.java @@ -0,0 +1,59 @@ +package com.rhizome.example.dto; + +public class EmployeeDTO { + + private int idEmployee; + private String nmEmployee; + private String knEmployee; + private String mailaddress; + private String password; + private int idDepartment; + + public int getIdEmployee() { + return idEmployee; + } + public void setIdEmployee(int idEmployee) { + this.idEmployee = idEmployee; + } + public String getNmEmployee() { + return nmEmployee; + } + public void setNmEmployee(String nmEmployee) { + this.nmEmployee = nmEmployee; + } + public String getKnEmployee() { + return knEmployee; + } + public void setKnEmployee(String knEmployee) { + this.knEmployee = knEmployee; + } + public String getMailaddress() { + return mailaddress; + } + public void setMailaddress(String mailaddress) { + this.mailaddress = mailaddress; + } + public String getPassword() { + return password; + } + public void setPassword(String password) { + this.password = password; + } + public int getIdDepartment() { + return idDepartment; + } + public void setIdDepartment(int idDepartment) { + this.idDepartment = idDepartment; + } + + @Override + public String toString() { + return this.getIdEmployee() + " " + +this.getNmEmployee() + " " + +this.getKnEmployee() + " " + +this.getMailaddress() + " " + +this.getPassword() + " " + +this.getIdDepartment(); + } + +} diff --git a/src/com/rhizome/example/main/Main.java b/src/com/rhizome/example/main/Main.java index 14fb220..c6c5429 100644 --- a/src/com/rhizome/example/main/Main.java +++ b/src/com/rhizome/example/main/Main.java @@ -7,6 +7,7 @@ import java.util.List; import java.util.Scanner; import com.rhizome.example.dao.EmployeeDAO; +import com.rhizome.example.dto.EmployeeDTO; import com.rhizome.example.util.DbUtil; /** @@ -48,15 +49,33 @@ public class Main { System.out.println("現在のメンテナンス対象テーブル:" + targetTableName(tblFlg)); System.out.println("1:検索 2:登録 3:更新 4:削除 9:テーブル切替 0:終了"); String ope = sc.nextLine(); + Connection con = DbUtil.getConnection(); + EmployeeDAO empDao = new EmployeeDAO(con); switch (ope) { case "1": empSelect(); break; case "2": + empDao.empInsert(inputCheck("社員名", false), + inputCheck("フリガナ", false), + inputCheck("メールアドレス", false), + inputCheck("パスワード", false), + Integer.parseInt(inputCheck("部署ID", true))); break; case "3": - break; + int id = Integer.parseInt(inputCheck("ID", true)); + if (empDao.selectById(id).size()==0) break; // 社員IDの照合に失敗した場合は処理を抜ける + else { + empDao.empUpdate(id, + inputCheck("社員名", false), + inputCheck("フリガナ", false), + inputCheck("メールアドレス", false), + inputCheck("パスワード", false), + Integer.parseInt(inputCheck("部署ID", true))); + break; + } case "4": + empDao.empDelete(Integer.parseInt(inputCheck("ID", true))); break; case "9": return; @@ -76,7 +95,7 @@ public class Main { * @throws SQLException */ public static void empSelect() throws ClassNotFoundException, SQLException { - List empList = new ArrayList<>(); + List empList = new ArrayList<>(); Connection con = DbUtil.getConnection(); EmployeeDAO empDao = new EmployeeDAO(con); System.out.println("1:全検索 2:条件検索 それ以外:戻る"); @@ -86,10 +105,13 @@ public class Main { case "1": empList = empDao.selectAll(); break; + case "2": + empList = empDao.selectById(Integer.parseInt(inputCheck("ID", true))); + break; default: return; } - for (String emp : empList) { + for (EmployeeDTO emp : empList) { System.out.println(emp); } } finally { diff --git a/src/com/rhizome/example/util/DbUtil.java b/src/com/rhizome/example/util/DbUtil.java index d2bb82e..f67dbe4 100644 --- a/src/com/rhizome/example/util/DbUtil.java +++ b/src/com/rhizome/example/util/DbUtil.java @@ -1,6 +1,9 @@ package com.rhizome.example.util; import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.PreparedStatement; +import java.sql.SQLException; public class DbUtil { // 定数定義(共通) @@ -41,7 +44,12 @@ public class DbUtil { * 生成されたConnectionを返却する * ※Connection生成には上記の定数を活用してください */ - + public static Connection getConnection() throws ClassNotFoundException, SQLException { + Class.forName(DB_DRIVER); + // Connection : not null && 接続状態 → フィールドを戻す + if( !((con!=null)&&(con.isValid(1))) ) con = DriverManager.getConnection(DB_URL, DB_USER, DB_PASS); + return con; + } /* * TODO 以下の仕様でメソッドを作成してください。 @@ -52,6 +60,9 @@ public class DbUtil { * 例外 :SQLException * 処理 :引数のDBステートメントがnullでない場合、そのDBステートメントをクローズする */ + public static void closeStatement(PreparedStatement stmt) throws SQLException { + if (stmt!=null) stmt.close(); + } /* @@ -63,6 +74,9 @@ public class DbUtil { * 例外 :SQLException * 処理 :引数のコネクションがnullでない場合、そのコネクションを切断する */ + public static void closeConnection(Connection con) throws SQLException { + if (con!=null) con.close(); + } }