✍️ 관련 강의: DB - JDBC 게시판 실습1 (JDBCTest.java)
👉자바 프로젝트-DB 연결. 데이터베이스의 데이터를 자바 프로젝트로 가져오는 과정
JDBC 작업 순서
- JDBC 사용(Driver Loading)
- DB와 연결(Connection 생성)
- SQL 준비 및 실행
1) Statement
2) PreparedStatement
1) executeQuery()
2) executeUpdate()- DB와 연결 해제(종료)
public JDBCTest() {
// 드라이버 로딩은 1번만 하고 사용. 따라서 생성자 안에 코드
try {
Class.forName("com.mysql.cj.jdbc.Driver");
System.out.println("드라이버 로딩 성공");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
Class.forName("com.mysql.cj.jdbc.Driver");
Class라는 클래스의 forName() 메서드는 해당 class 파일을 찾아서 JVM에 로드해놓는다.
private List<Board> selectAll() {
List<Board> list = new ArrayList<>();
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
// 2. DB와 연결(Connection 생성)
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/ssafy_board?serverTimezone=UTC", "ssafy", "ssafy");
// 3-1. SQL 준비
String sql = "SELECT * FROM board";
// 3-2. 실행
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
// 3-3. rs의 데이터 가져오기 및 사용
while(rs.next()) {
Board board = new Board();
board.setId(rs.getInt("id"));
board.setTitle(rs.getString("title"));
board.setWriter(rs.getString("writer"));
board.setContent(rs.getString("content"));
board.setRegDate(rs.getString("reg_date"));
board.setViewCnt(rs.getInt("view_cnt"));
list.add(board);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 4. 데이터베이스 연결 해제
try {
if(rs != null)
rs.close();
if(stmt != null)
stmt.close();
if(conn != null)
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return list;
}
드라이버 로딩을 하면 DriverManager를 사용할 수 있다. DriverManager 클래스의 Connection을 이용한다.
Connection은 인터페이스이므로 new 연산자로 직접 객체를 만들 수 없다. 따라서 DriverManager를 통해 Connection을 가지고 온다.
연결 후 sql문을 (데이터베이스의 서버??)서버에 전달하기 위한 객체이다.
Connection을 이용해서 가져온다. Connection의 createStatement() 메서드를 이용한다.
Statement의 executeQuery(sql)를 통해 sql 문을 담아서 전달한다. executeQuery(sql)의 반환값 ResultSet은 변수 rs에 저장하고서 자바 프로젝트 내에서 사용한다.
ResultSet에 있는 값을 가져온다. 이때 결과셋(DB의 테이블)의 컬럼명이나 컬럼 순서를 알고 있으면 좋다. 컬럼의 인덱스나 컬럼의 라벨을 파라미터로 사용하기 때문이다.
💡 DB의 인덱스는 1부터 시작한다.
NULL이 아니라는 건 try구문 안에서 정상적으로 연결이 되고 Statement가 만들어지고 ResultSet이 생겨났다는 것을 뜻한다. 즉 NULL이라는 건 연결 등 이후의 작업이 이루어지지 않았다는 것이므로 닫을 것도 없다.