DAO란 단순하게 저장만, 기능만 하는 역할을 하는 클래스라고 보면된다. DTO에서 받은 정보를 그대로 넘겨주는 역할을 한다.
DTO란 가방같은 존재로 생각하면 된다. 즉, mysql에서 필요한 컬럼을 담는 클래스는 하나 만든다고 생각하면된다.
또한, 파라미터에 하나하나씩 넣기보다 하나만 넣어서 데이터를 연동하면 직관적으로도 심플하고 관리하기도 편할 것이다.
DBUtil.java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class DBUtil {
/*
* DBUtil은 매번 메서드나 클래스에 mysql에 connection을 하는게 번거로움을 해소시켜주는 클래스라고 보면 되겠다.
* 이유는 입력하기 짜증나고 귀찮고 예민한 코드들이 있어 쉽게 오류도 날수 있는 코드들이기도하고
* 코드의 복잡성또한 낮춰주기때문이다.
* (응 뇌피셜 ~ )
*/
// 리턴으로 커넥션을 받아와야 한다.
static String URL = "jdbc:mysql://localhost:3306/testdb?serverTimezone=UTC";
static String USER = "joe";
static String PASSWORD = "1234";
static String DRIVER_NAME = "com.mysql.cj.jdbc.Driver";
// 접속
public static Connection getConnection() throws Exception{
Connection conn = null;
Class.forName(DRIVER_NAME);
conn = DriverManager.getConnection(URL, USER, PASSWORD);
return conn;
}
// 접속종료
public static void close(Connection conn) {
if(conn != null) {
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static void close(Connection conn, PreparedStatement ps) {
if(ps != null) {
try {
ps.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
close(conn);
}
}
Main.java
import java.util.Scanner;
public class Main {
/*
* 수정하기 1. try() << 소괄호 안에 생성자를 넣으면 finally에서 close를 안해도된다. 2. DeptDAO.java 클래스에
* 추가 수정 삭제 클래스 모아놓기. 3. 추가로 조회할 수 있는 메서드 (한건만) 4. 추가로 조회할 수 있는 메서드 ('dname'으로
* 조회) (깃헙에 있는 자료 참고해서 업데이트 하기.) - https://github.com/carami/encore_11
*/
public static void main(String[] args) {
DeptDAO dao = new DeptDAO();
DeptDTO dto = new DeptDTO();
Scanner scan = new Scanner(System.in);
while (true) {
System.out.println("1. 추가");
System.out.println("2. 수정");
System.out.println("3. 삭제");
int num = scan.nextInt();
if (num == 1) {
System.out.println("추가");
System.out.print("deptno : ");
int deptno = scan.nextInt();
System.out.print("dname : ");
String dname = scan.next();
System.out.print("loc : ");
String loc = scan.next();
dto.setDeptno(deptno); // [1] 위에서 스캐너로 입력받은 값을 차례대로 dto클래스의 set메서드를 사용해 private한 변수에 넣고
dto.setDname(dname);
dto.setLoc(loc);
dao.insert(dto); // [2] set된 private 변수들을 dao의 insert메서드의 파라메터에 넣어준다.
} else if (num == 2) {
System.out.println("수장");
System.out.print("deptno : ");
int deptno = scan.nextInt();
System.out.print("dname : ");
String dname = scan.next();
System.out.print("loc : ");
String loc = scan.next();
dto.setDeptno(deptno);
dto.setDname(dname);
dto.setLoc(loc);
dao.update(dto);
} else if (num == 3) {
System.out.println("삭제");
System.out.print("deptno : ");
int deptno = scan.nextInt();
dto.setDeptno(deptno);
dao.delete(dto);
} else {
System.out.println("잘못된 번호");
}
}
}
}
DeptDAO.java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
/*
* 각 DAO 는 테이블 당 하나씩 있으면 된다.
* Connector는 클래스를 하나 만들어서 참조하게 하면 된다.
*/
public class DeptDAO {
public void insert(DeptDTO dto) { // [3] 입력된 클래스의 정보를
String sql = "insert into dept (deptno, dname, loc) values (?,?,?)";
try (Connection conn = DBUtil.getConnection(); PreparedStatement ps = conn.prepareStatement(sql);) {
ps.setInt(1, dto.getDeptno()); // [4] 사용해서 쿼리문을 dto클래스 내부의 get메서드를 사용해서 private 변수들의 값들을 가져와서
ps.setString(2, dto.getDname());
ps.setString(3, dto.getLoc());
int count = ps.executeUpdate(); // [5] PreparedStatement클래스의 executeUpdate메서드를 통해 업데이트를 하게된다. * 참고로 ps는
// conn으로 sql이 연동되어있음을 확인하자.
if (count > 0) {
System.out.println(count + "입력됨");
} else {
System.out.println("입력 실패");
}
} catch (SQLException e) {
e.printStackTrace();
} catch (Exception e1) {
e1.printStackTrace();
}
}
public void update(DeptDTO dto) {
String sql = "update dept set dname = ?, loc = ? where deptno = ?";
try (Connection conn = DBUtil.getConnection(); PreparedStatement ps = conn.prepareStatement(sql);) {
ps.setString(1, dto.getDname());
ps.setString(2, dto.getLoc());
ps.setInt(3, dto.getDeptno());
int count = ps.executeUpdate();
if (count > 0) {
System.out.println(count + "입력됨");
} else {
System.out.println("입력 실패");
}
} catch (SQLException e) {
e.printStackTrace();
} catch (Exception e1) {
e1.printStackTrace();
}
}
public void delete(DeptDTO dto) {
String sql = "delete from dept where deptno = ?";
try (Connection conn = DBUtil.getConnection(); PreparedStatement ps = conn.prepareStatement(sql);) {
ps.setInt(1, dto.getDeptno());
int count = ps.executeUpdate();
if (count > 0) {
System.out.println(count + "입력됨");
} else {
System.out.println("입력 실패");
}
} catch (SQLException e) {
e.printStackTrace();
} catch (Exception e1) {
e1.printStackTrace();
}
}
}
DeptDTO.java
public class DeptDTO {
private int deptno;
private String dname;
private String loc;
public int getDeptno() {
return deptno;
}
public void setDeptno(int deptno) {
this.deptno = deptno;
}
public String getDname() {
return dname;
}
public void setDname(String dname) {
this.dname = dname;
}
public String getLoc() {
return loc;
}
public void setLoc(String loc) {
this.loc = loc;
}
// toString() 함수를 오버라이드 해서 들어있는 내용을 한 눈에 볼수 있도록 도와준다.
@Override
public String toString() {
return "DeptDTO [deptno=" + deptno + ", dname=" + dname + ", loc=" + loc + "]";
}
}
잘못 기입한 내용이나 모르는 부분있으면 댓글로 남겨주세요.
* 읽어주셔서 감사합니다 *
'workSpace > JAVA' 카테고리의 다른 글
[Java][mysql][Swing] 연동한 간단한 미니 프로젝트 - GUI game - (GUI 란?) (0) | 2020.12.09 |
---|---|
[Java][mysql] 자바와 mysql을 연동한 은행 프로그램 (3) | 2020.12.08 |
[Java][JDBC][Insert][Update][Delete]자바에 MYSQL(workbench) 데이터베이스에 추가, 수정, 변경 하기 (0) | 2020.12.07 |
[Java][JDBC][Connection]자바에 MYSQL(workbench) 데이터베이스 연동하기 (0) | 2020.12.07 |
[Java]About GUI (0) | 2020.09.01 |