JDBC 실습_게시판1,2

호떡·2022년 9월 14일
0

✍️ 관련 강의: DB - JDBC 게시판 실습1 (JDBCTest.java)
👉자바 프로젝트-DB 연결. 데이터베이스의 데이터를 자바 프로젝트로 가져오는 과정


JDBC 작업 순서

  1. JDBC 사용(Driver Loading)
  2. DB와 연결(Connection 생성)
  3. SQL 준비 및 실행
    1) Statement
    2) PreparedStatement
    1) executeQuery()
    2) executeUpdate()
  4. DB와 연결 해제(종료)

	public JDBCTest() {
		// 드라이버 로딩은 1번만 하고 사용. 따라서 생성자 안에 코드
		try {
			Class.forName("com.mysql.cj.jdbc.Driver");
			System.out.println("드라이버 로딩 성공");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}

1. JDBC 드라이버 로딩

JDBCTest() 생성자 부분

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;
	}

2. DB와 연결(Connection 생성)

DriverManager

드라이버 로딩을 하면 DriverManager를 사용할 수 있다. DriverManager 클래스의 Connection을 이용한다.
Connection은 인터페이스이므로 new 연산자로 직접 객체를 만들 수 없다. 따라서 DriverManager를 통해 Connection을 가지고 온다.

3-1. SQL 준비

Statement

연결 후 sql문을 (데이터베이스의 서버??)서버에 전달하기 위한 객체이다.
Connection을 이용해서 가져온다. Connection의 createStatement() 메서드를 이용한다.

3-2. 실행

executeQuery(sql)

Statement의 executeQuery(sql)를 통해 sql 문을 담아서 전달한다. executeQuery(sql)의 반환값 ResultSet은 변수 rs에 저장하고서 자바 프로젝트 내에서 사용한다.

3-3. rs의 데이터 가져오기 및 사용

rs.getInt("id") 와 rs.getString("title")

ResultSet에 있는 값을 가져온다. 이때 결과셋(DB의 테이블)의 컬럼명이나 컬럼 순서를 알고 있으면 좋다. 컬럼의 인덱스나 컬럼의 라벨을 파라미터로 사용하기 때문이다.
💡 DB의 인덱스는 1부터 시작한다.

4. 데이터베이스 연결 해제

NULL이 아닐 때 종료하는 이유

NULL이 아니라는 건 try구문 안에서 정상적으로 연결이 되고 Statement가 만들어지고 ResultSet이 생겨났다는 것을 뜻한다. 즉 NULL이라는 건 연결 등 이후의 작업이 이루어지지 않았다는 것이므로 닫을 것도 없다.

0개의 댓글