(1) MySQL 드라이버 다운로드
https://dev.mysql.com/downloads/connector/j/ > platform independent > zip 다운 > mysql-connector-j-8.3.0 (mysql 드라이버)
(2) Eclipse에서 jar 파일 인식하도록 설정
String driver ="com.mysql.cj.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/testdb";
String userid = "root";
String passwd = "1234";
cf) Oracle 접속 정보
String driver ="oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@localhost:3306:서비스명";
String userid = "system | sys";
String passwd = "1234";
: com.mysql.cj.jdbc.Driver 클래스를 객체 생성한다는 의미
: new 사용 안 함
Class.forName(driver);
Connection con = DriverManager.getConnection(url, userid, passwd);
String sql = "select deptno as no, dname, loc from dept";
: sql문 전송 담당 객체
PreparedStatement pstmt = con.prepareStatement(String sql);
select문
-> 결과를 테이블 형태로 받음
테이블 객체화 한 것이 ResultSet
ResultSet rs = pstmt.executeQuery();
DML (insert, delete, update)
-> 결과를 정수형(영향받은 행 개수)으로 받음
int n = pstmt.executeUpdate(); // insert, delete, update
while (rs.next()) { } // 행 선택
// 열 선택
int deptno = rs.getInt("no"); // 컬럼헤더 | 위치 (1부터)
int deptno = rs.getInt(1);
String dname = rs.getString("dname"); // 위치 2
String loc = rs.getString("loc"); // 위치 3
DBMS는 외부자원이기 때문에 항상 close() 해줘야 한다
사용 순서
Connection con
PreparedStatement pstmt
ResutlSet rs
close()는 사용 역순
rs.close();
pstmt.close();
con.close();
select *
from
where deptno = 실제값;
String sql = "select deptno as no, dname, loc from dept
where deptno = ? or dname = ?";
PreparedStatement pstmt = con.prepareStatement(sql);
// ? 대신에 실제값을지정 (?을 바인딩 변수라고 부른다)
// pstmt.setXXX (? 순서, 값);
pstmt.setInt(1, 10);
pstmt.setString(2, "개발");
ResultSet rs = pstmt.executeQuery();
rs.getXXX();
1) 패턴
(1) DAO 패턴
(2) DTO 패턴
: DeptServiceImpl 클래스에서 처리한다 (Connection이 필요하기 때문)
@Override
public int insertDelete(DeptDTO dto, int deptno) throws DuplicatedDeptnoException{
int n =0;
Connection con = null;
try {
con = DriverManager.getConnection(url, userid, passwd);
// DeptDAO 연동
DeptDAO dao = new DeptDAO();
// 트랜잭션 처리
con.setAutoCommit(false);
dao.insert(con, dto);
dao.delete(con, deptno);
con.commit();
} catch (SQLException e) {
try {
con.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
} finally {
try {
if(con!=null) con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return n;
}
```