Model에 해당하는 객체
- DAO (Data Access Object) : DB에 접근하는 객체
- VO (Value Object) : DB 테이블을 객체화시킨 객체
구현 과정
1. JDBC (Java Database Connectivity) : 드라이버 로드, 커넥션 open 및 close - 1,2,4
2. VO : 테이블 -> Object (객체화)
3. DAO : pstmt로 data read, write - 3
[JDBC]
DB와 연동하기 위한 드라이버 로드하는 과정
Connection 객체 생성 (open)
생성된 Connection 객체 close
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class JDBC {
public static Connection getConnection() {
Connection conn = null;
String DName_oracle = "oracle.jdbc.driver.OracleDriver"; // JDBC의 드라이버 클래스명
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String user="sngynhy";
String password="****";
try {
Class.forName(DName_oracle);
conn = DriverManager.getConnection(url, user, password);
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
public static void Close(Connection conn, PreparedStatement pstmt) {
try {
if (pstmt != null) pstmt.close();
if (conn != null) conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
[VO]
VO(Value Object) : DB 테이블을 객체화시킨 객체
public class TestVO {
private int a;
private String b;
private int c;
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
public String getB() {
return b;
}
public void setB(String b) {
this.b = b;
}
public int getC() {
return c;
}
public void setC(int c) {
this.c = c;
}
@Override
public String toString() {
return this.a + " " + this.b;
}
}
[DAO]
DAO(Data Access Object) : DB에 접근하는 객체
JDBC로부터 열린 conn을 받아와서 DB 처리
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
public class TestDAO {
static String sql_SELECT_ONE = "select * from test where a = ?"; // a - PK
static String sql_SELECT_ALL = "select * from test where b like ? order by a asc";
// static String sql_SELECT_ALL = "select * from test where c < 9 order by a asc";
static String sql_INSERT = "insert into test values (?, ?, ?)";
static String sql_DELETE = "delete from test where a = ?";
static String sql_UPDATE = "update test set b = ? , c = ? where a = ?";
private Connection conn = null;
private PreparedStatement pstmt = null;
// CRUD는 항상 제공되어야함
// insert, select(단일객체), select(목록), update, delete
// select(단일객체)문 함수명 -> getDB명()
public TestVO getTest(TestVO vo) {
// 리턴 타입은 사용자가 조회한 DB 테이블을 객체화시킨 객체 -> TestVO
conn = JDBC.getConnection(); // 연결
TestVO data = null;
// DB에 내가 찾고자하는 데이터의 존재 여부를 모르기 때문에 null로 초기화
// -> 검색 결과 없을 시 null로 리턴
try {
pstmt = conn.prepareStatement(sql_SELECT_ONE);
pstmt.setInt(1, vo.getA());
// sql구문 첫번째 물음표값을 사용자로부터 건네받은 인자값으로 설정
ResultSet rs = pstmt.executeQuery();
if (rs.next()) { // 만약 찾고자 하는 데이터가 DB에 있다면
data = new TestVO();
// 현재 TestVO()는 기본생성자이기 때문에 필드값들이 초기화되지 않은 상태
// DB에 있는 데이터로 TestVO의 필드값을 초기화해주는 과정
data.setA(rs.getInt("a"));
data.setB(rs.getString("b"));
data.setC(rs.getInt("c"));
}
rs.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBC.Close(conn, pstmt); // conn, pstmt 모두 close
}
System.out.println("getTest() 수행완료");
return vo;
}
// select(목록)문 함수명 -> getDB명List()
public ArrayList<TestVO> getTestList(TestVO vo) {
// 리턴타입은 TestVO를 목록(list)로 받음
conn = JDBC.getConnection();
ArrayList<TestVO> voList = new ArrayList<TestVO>();
try {
pstmt = conn.prepareStatement(sql_SELECT_ALL);
pstmt.setString(1, "%" + vo.getB() + "%"); // like 검색 시
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
TestVO data = new TestVO();
data.setA(rs.getInt("a"));
data.setB(rs.getString("b"));
data.setC(rs.getInt("c"));
voList.add(data);
}
rs.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBC.Close(conn, pstmt);
}
System.out.println("getTestList() 수행완료");
return voList;
}
public void insertTest(TestVO vo) {
conn = JDBC.getConnection();
try {
pstmt = conn.prepareStatement(sql_INSERT);
pstmt.setInt(1, vo.getA());
pstmt.setString(2, vo.getB());
pstmt.setInt(3, vo.getC());
pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBC.Close(conn, pstmt);
}
System.out.println("insertTest() 수행완료");
}
public void deleteTest(TestVO vo) { // 인자로 PK 받아도 상관없음!
conn = JDBC.getConnection();
try {
pstmt = conn.prepareStatement(sql_DELETE);
pstmt.setInt(1, vo.getA());
pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBC.Close(conn, pstmt);
}
System.out.println("deleteTest() 수행완료");
}
public void updateTest(TestVO vo) {
// 단 하나의 값만 수정하더라도 PK 제외한 모든 데이터가 업데이트 처리됨
conn = JDBC.getConnection();
try {
pstmt = conn.prepareStatement(sql_UPDATE);
pstmt.setString(1, vo.getB());
pstmt.setInt(2, vo.getC());
pstmt.setInt(3, vo.getA());
pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBC.Close(conn, pstmt);
}
System.out.println("updateTest 수행완료");
}
}
[main함수]
import java.util.ArrayList;
public class Test1 {
public static void main(String[] args) {
TestDAO dao = new TestDAO();
TestVO vo = new TestVO();
// insertTest
vo.setA(10);
vo.setB("아무무");
dao.insertTest(vo);
System.out.println();
// getTest - select(단일객체)
vo.setA(9);
vo = dao.getTest(vo);
System.out.println(vo);
System.out.println();
// updateTest - update는 반드시 getTest()를 실행한 뒤 이루어져야 한다!!!
// 수정 전에 데이터가 존재하는지 조회하기
vo.setA(10);
vo = dao.getTest(vo);
if (vo != null) { // update 가능!
System.out.println(vo);
System.out.println("업데이트 할 b값 입력");
String b = "뽕꾸";
vo.setB(b);
dao.updateTest(vo);
} else { // update 불가능!
System.out.println("검색 결과 없음!");
}
vo.setA(3);
dao.deleteTest(vo);
ArrayList<TestVO> datas = dao.getTestList(vo);
for (TestVO v : datas) {
System.out.println(v);
}
}
}
'개발 공부 > JAVA' 카테고리의 다른 글
[JAVA] 롤 챔피언 순위 크롤링 (0) | 2021.08.02 |
---|---|
[JAVA] PreparedStatement를 이용한 트랜잭션(Transaction) 처리 (0) | 2021.07.29 |
[JAVA] 컬렉션 프레임 워크 (1) (ArrayList / Vector / LinkedList) (0) | 2021.07.24 |
이클립스 프로젝트 깃허브(Github) 연동하기 (0) | 2021.07.23 |
[JAVA] MySQL 연동하기 (0) | 2021.07.23 |