public class DAOTest {
public static void main(String[] args) {
Scanner key = new Scanner(System.in);
System.out.println("******인사관리시스템********");
System.out.println("1. 사원등록");
System.out.println("2. 사원조회");
System.out.println("3. 사원수정");
System.out.println("4. 사원퇴사");
System.out.println("5. 주소로 사원 검색");
System.out.println("6. 로그인");
System.out.println("7. 사원번호로 조회하기");
System.out.print("원하는 작업을 선택하세요:");
int choice = key.nextInt();
show(choice);
}
public static void show(int choice){
MenuUI ui = new MenuUI();
switch(choice){
case 1:
ui.insertMenu();
break;
case 2:
ui.selectMenu();
break;
case 3:
ui.updateMenu();
break;
case 4:
ui.deleteMenu();
break;
case 5:
ui.findByAddrMenu();
break;
case 6:
ui.loginMenu();
break;
case 7:
ui.myPageMenu();
break;
}
}
}
public class DBUtil {
//드라이버 로딩
//=>클래스가 로딩될 때 한 번 실행된다.
static {
System.out.println("스태틱블럭");
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
//DB서버 접속하기
public static Connection getConnect() {
Connection con = null;
String url="jdbc:oracle:thin:@192.168.0.4:1521:xe";
String user="scott";
String password="tiger";
try {
con = DriverManager.getConnection(url, user, password);
} catch (SQLException e) {
e.printStackTrace();
}
return con;
}
//자원반납
public static void close(ResultSet rs, Statement stmt, Connection con) {
try {
if(rs!=null) rs.close();
if(stmt!=null) stmt.close();
if(con!=null) con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public class MemberDTO {
private String id;
private String pass;
private String name;
private String addr;
private Date regDate;
private int point;
private String info;
MemberDTO(){
//아무일 하지 않는 기본생성자 꼭 만들기
}
//select용
public MemberDTO(String id, String pass, String name, String addr, Date regDate, int point, String info) {
this(id,pass,name,addr,info);//순서 잘 지켜야함
this.regDate = regDate;
this.point = point;
}
//insert용
public MemberDTO(String id, String pass, String name, String addr, String info) {
super();
this.id = id;
this.pass = pass;
this.name = name;
this.addr = addr;
this.info = info;
}
//update용
public MemberDTO(String id, String addr, String info) {
super();
this.id = id;
this.addr = addr;
this.info = info;
}
@Override
public String toString() {
return "MemberDTO [id=" + id + ", pass=" + pass + ", name=" + name + ", addr=" + addr + ", regDate=" + regDate
+ ", point=" + point + ", info=" + info + "]";
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPass() {
return pass;
}
public void setPass(String pass) {
this.pass = pass;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
public Date getRegDate() {
return regDate;
}
public void setRegDate(Date regDate) {
this.regDate = regDate;
}
public int getPoint() {
return point;
}
public void setPoint(int point) {
this.point = point;
}
public String getInfo() {
return info;
}
public void setInfo(String info) {
this.info = info;
}
}
public interface MemberDAO {
void insert(String id, String pass, String name, String addr, String info);//안쓸거지만 남겨둠
int insert(MemberDTO user);
void update(String info, String addr, String id);//오버로딩? 이라 냅둬도되긴함. 히스토리남기기
void update(MemberDTO updateUser);
void delete(String did);
List<MemberDTO> select();
List<MemberDTO> search(String col,String name);
MemberDTO login(String id,String pass);
MemberDTO mypage(String id);
}
public class MenuUI {
Scanner key = new Scanner(System.in);
MemberDAO dao = new MemberDAOImpl();
public void insertMenu(){
System.out.println("*******사원등록********");
System.out.print("아이디:");
String id = key.next();
System.out.print("패스워드:");
String pass = key.next();
System.out.print("성명:");
String name = key.next();
System.out.print("주소:");
String addr = key.next();
System.out.print("기타:");
String info = key.next();
//여기에서 MemberDAO의 메소드를 호출하세요
MemberDTO user = new MemberDTO(id, pass, name, addr, info);//spring으로 넘어가면 자동으로 만들어줌
int result = dao.insert(user);
if(result>=1) {
System.out.println("로그인해서 메인페이지 이동");
}else {
System.out.println("실패를 알려줄 수 있는 alert실행");
System.out.println("다시 회원가입할 수 있는 페이지로 이동");
}
//dao.insert(id, pass, name, addr, info);
}
public void updateMenu(){
System.out.println("*******사원수정********");
System.out.print("정보:");
String info = key.next();
System.out.print("주소:");
String addr = key.next();
System.out.print("주소:");
String id = key.next();
//여기에서 MemberDAO의 메소드를 호출하세요
// dao.update(info, addr, id);
MemberDTO updateUser = new MemberDTO(id, addr, info);
dao.update(updateUser);
}
public void deleteMenu(){
System.out.println("*******사원삭제********");
System.out.print("삭제할id:");
String id = key.next();
//여기에서 MemberDAO의 메소드를 호출하세요
dao.delete(id);
}
public void findByAddrMenu(){
System.out.println("*******사원검색********");
System.out.print("주소:");
String addr = key.next();
//여기에서 MemberDAO의 메소드를 호출하세요
dao.search("addr", addr);
List<MemberDTO> searchlist = dao.search("addr",addr);
for(MemberDTO user:searchlist) {
print(user);
}
}
public void loginMenu() {
System.out.println("*******로그인********");
System.out.print("아이디:");
String id = key.next();
System.out.print("패스워드:");
String pass = key.next();
MemberDTO loginUser = dao.login(id, pass);
//로그인 성공하면 로그인성공!!메시지와 로그인한 사용자의 정보를 출력(print호출)
//로그인 실패하면 로그인실패!!메시지를 출력
if(loginUser!=null) {
System.out.println("로그인성공");
print(loginUser);
}else {
System.out.println("로그인실패");
}
}
public void myPageMenu() {
System.out.println("*******마이페이지********");
System.out.print("아이디:");
String id = key.next();
//myPageMenu메소드에서 입력받은 아이디로 아이디에 따른 정보를 조회할 수 있도록 코드를 완성하세요
//-MemberDAO, MemberDAOImpl에 메소드를 정의하고 작업하세요(리턴타입,메소드명,매개변수는 각자 알아서 작업하기)
MemberDTO user = dao.mypage(id);
if(user!=null) {
System.out.println("로그인성공");
print(user);
}else {
System.out.println("일치하는 사용자가 없습니다");
}
}
public void selectMenu(){
System.out.println("*******사원조회********");
//여기에서MemberDAO의 메소드를 호출하세요 - 전체사원조회
List<MemberDTO> userlist = dao.select();
System.out.println("조회된 레코드갯수 :"+userlist.size());
//ArrayList에 저장된 DTO를 다양하게 출력할 수 있도록 코드를 작성
for(MemberDTO user:userlist) {
print(user);
}
}
public void print(MemberDTO user) {
System.out.print(user.getId()+"\t");
System.out.print(user.getPass()+"\t");
System.out.print(user.getName()+"\t");
System.out.print(user.getAddr()+"\t");
System.out.print(user.getRegDate()+"\t");
System.out.print(user.getPoint()+"\t");
System.out.println(user.getInfo()+"\t");
}
}
//insert,delete,update,select,login,search
public class MemberDAOImpl implements MemberDAO {
@Override
public int insert(MemberDTO user) {
System.out.println(user);//user.toString()가 생략
//System.out.println(id+","+pass+","+name+","+addr+","+info);//오류가 발생하는경우 잘입력되는지 검증하기 위해 이렇게 찍어보기
String sql="insert into member values(?,?,?,?,sysdate,10000,?)";
Connection con = null;
PreparedStatement ptmt = null;
int result=0;
try {
con = DBUtil.getConnect();
ptmt = con.prepareStatement(sql);
ptmt.setString(1, user.getId());
ptmt.setString(2, user.getPass());
ptmt.setString(3, user.getName());
ptmt.setString(4, user.getAddr());
ptmt.setString(5, user.getInfo());
result = ptmt.executeUpdate();
System.out.println(result+"개 행 삽입성공!!");
} catch(SQLException e) {
e.printStackTrace();
} finally {
DBUtil.close(null, ptmt, con);
}
return result;
}
public void insert(String id, String pass, String name, String addr, String info) {
}
@Override
public void update(MemberDTO updateUser) {
String sql = "update member set addr=?, info=? where id=?";
Connection con = null;
PreparedStatement ptmt = null;
try {
con = DBUtil.getConnect();
ptmt = con.prepareStatement(sql);
ptmt.setString(1, updateUser.getAddr());
ptmt.setString(2, updateUser.getInfo());
ptmt.setString(3, updateUser.getId());
ptmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBUtil.close(null, ptmt, con);
}
}
public void update(String info, String addr, String id) {
}
public void delete(String did) {
StringBuffer sql = new StringBuffer();
sql.append("delete member ");
sql.append("where id=?");
Connection con = null;
PreparedStatement ptmt = null;
try {
con = DBUtil.getConnect();
ptmt = con.prepareStatement(sql.toString());
ptmt.setString(1, did);
ptmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBUtil.close(null, ptmt, con);
}
}
//조회한 테이블을 변환해서 호출한 곳으로 넘겨줄 수 있도록 작업
//테이블에 레코드가 여러개 있으므로 각 레코드를 DTO로 변환하고 이 DTO들을 ArrayList와 같은 자료구조에 담아서 넘겨줄 수 있도록(리턴) 처리
//웹에서는 List로 변환해서 넘기는 것이 일반적
public List<MemberDTO> select() {
String sql = "select * from member";
Connection con = null;
PreparedStatement ptmt = null;
ResultSet rs = null;
List<MemberDTO> userlist = new ArrayList<>();//레코드를 담을 자료구조
MemberDTO user = null;//조회한 레코드를 담을 객체
try {
con = DBUtil.getConnect();
ptmt = con.prepareStatement(sql);
rs = ptmt.executeQuery();
System.out.println(rs);
while(rs.next()) {//while한번실행되는게 레코드하나읽는것
//레코드의 한 컬럼들을 이용해서 MemberDTO객체를 생성
user = new MemberDTO(rs.getString("id"), rs.getString("pass"),
rs.getString("name"), rs.getString(4), rs.getDate(5),
rs.getInt("point"), rs.getString(7));
userlist.add(user);
}
// System.out.println("ArrayList 저장된 레코드 갯수:"+userlist.size());
// System.out.println(userlist);
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBUtil.close(rs, ptmt, con);
}
return userlist;
}
//프라이머리키로 where절에서 조건을 and로 적용하고 있으므로 결과는 무조건 1개
//결과가 1개면 XXXDTO로 변환한다.
public MemberDTO login(String id,String pass) {
String sql = "select * from member where id =? and pass=?";
Connection con = null;
PreparedStatement ptmt = null;
ResultSet rs = null;
MemberDTO loginUser = null;
try {
con = DBUtil.getConnect();
ptmt = con.prepareStatement(sql);
ptmt.setString(1, id);
ptmt.setString(2, pass);
rs = ptmt.executeQuery();
if(rs.next()) {
loginUser= new MemberDTO(rs.getString("id"), rs.getString("pass"),
rs.getString("name"), rs.getString(4), rs.getDate(5),
rs.getInt("point"), rs.getString(7));
System.out.print(rs.getString("name")+"님 로그인 성공");
}else {
System.out.print("님 로그인 실패");
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
DBUtil.close(rs, ptmt, con);
}
return loginUser;
}
//검색결과가 0,1 또는 많이
//위와같은 결과가 리턴되는 경우 ArrayList<XXXDTO>의 형태로 조회된 결과를 변환한다.
public List<MemberDTO> search(String col,String name) {
String sql="";
if(col.equals("addr")) {
sql = "select * from member where addr like ?";
}else if(col.equals("ename")) {
sql = "select * from emp where ename like ?";
}
Connection con = null;
PreparedStatement ptmt = null;
ResultSet rs = null;
List<MemberDTO> searchlist = new ArrayList<>();
MemberDTO user = null;
try {
con = DBUtil.getConnect();
ptmt = con.prepareStatement(sql);
ptmt.setString(1, "%"+name+"%");
rs = ptmt.executeQuery();
while(rs.next()){
user = new MemberDTO(rs.getString("id"), rs.getString("pass"),
rs.getString("name"), rs.getString(4), rs.getDate(5),
rs.getInt("point"), rs.getString(7));
searchlist.add(user);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBUtil.close(rs, ptmt, con);
}
return searchlist;
}
public MemberDTO mypage(String id){
Connection con = null;
PreparedStatement ptmt = null;
ResultSet rs = null;
String sql = "select * from member where id = ?";
MemberDTO loginUser = null;
try {
con = DBUtil.getConnect();
ptmt = con.prepareStatement(sql);
ptmt.setString(1, id);
rs = ptmt.executeQuery();
if(rs.next()) {
loginUser= new MemberDTO(rs.getString("id"), rs.getString("pass"),
rs.getString("name"), rs.getString(4), rs.getDate(5),
rs.getInt("point"), rs.getString(7));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBUtil.close(rs, ptmt, con);
}
return loginUser;
}
}
본 포스팅은 멀티캠퍼스의 멀티잇 백엔드 개발(Java)의 교육을 수강하고 작성되었습니다.