executeQuery(sql)와 executeUpdate()

호떡·2022년 9월 14일
0

✍️ 관련 강의: DB JDBC 게시판 실습2,3 (BoardDaoImpl.java)

executeQuery(sql)

"데이터베이스 > 자바 프로젝트"
"R: 데이터를 읽어온다"

	@Override
	public List<Board> selectAll() {
		String sql = "SELECT * FROM board";
		
		Connection conn = null;
		Statement stmt = null;
		ResultSet rs = null;
		
		List<Board> list = new ArrayList<>();
		try {
			conn = util.getConnection();
			stmt = conn.createStatement();
			rs = stmt.executeQuery(sql);
			
			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) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			util.close(rs, stmt, conn);
		}
		
		return list;
	}

selectAll() 메서드 구현 시 활용되었다. 즉 데이터베이스의 데이터를 읽기(SELECT) 위한 메서드이다. 따라서 SELECT문이 담긴 sql을 파라미터로 하고, stmt에 담아 이를 데이터베이스 서버에 전달한다. stmt.executeQuery(sql)는 (데이터베이스 서버에)전달한 sql문이 실행되고 ResultSet이 생성되어 반환값으로 반환된다.
ResultSet에 담긴 테이블의 데이터들을 rs.getInt("id")와 rs.getString("title")를 이용하여 자바 프로젝트 내로 읽어들인다. 이를 setter를 활용하여 Board 인스턴스를 생성한다.
*Statement는 쿼리문을 담아서 날리기 위한 객체이다.

executeUpdate()

"자바 프로젝트의 인스턴스 > 데이터베이스"
"C: 데이터를 만든다."
"U: 수정한다."
"D: 삭제한다."


	@Override
	public void insertBoard(Board board) throws SQLException {
		String sql = "INSERT INTO board(title, writer, content) VALUES (?,?,?)";
		
		// DB에 접속해서 사용하게끔 쓰자
		Connection conn = null;
		PreparedStatement pstmt = null;
		
		try {
			conn = util.getConnection();
			
			// autocommit 해제
			// 여러개의 작업을 했을 때 완벽히 동작이 됐다면 반영하기 위해 밑에서 commit
			conn.setAutoCommit(false);
			
			pstmt = conn.prepareStatement(sql);
			
			pstmt.setString(1, board.getTitle());
			pstmt.setString(2, board.getWriter());
			pstmt.setString(3, board.getContent());
			
			int result = pstmt.executeUpdate();
			System.out.println(result);
			
			// 지금까지 작업한 것 commit
			conn.commit();
		}
		catch (Exception e) {
			// 작업 중 예외가 생기면 지금까지 작업한 것 Rollback
			conn.rollback();
		} 
		finally {
			util.close(pstmt,conn);
		}
	}

insertBoard(Board board) 메서드 구현 시 활용되었다. 자바 프로젝트 내에서 생성한 Board 인스턴스를 데이터베이스에 추가한다. 따라서 어떤 board 인스턴스가 인자값으로 들어올지 모르기 때문에 PreparedStatement를 생성하여 다양한 board 인스턴스를 받을 수 있도록 대비한다. 또한 들어온 board 인스턴스의 데이터들을 board.getTitle()와 같이 getter로 얻어내고, pstmt.setString(1, board.getTitle()) 과 같이 데이터베이스에 전달할 컬럼값들을 pstmt에 담아 전달한다. 이를 executeUpdate() 메서드를 활용하여 데이터베이스에 추가한다. 반환값은 몇 개의 행에 대해 작업이 이루어졌는지 int 값이 반환된다.

0개의 댓글