개주 훈련일지/🔥 히노카미 코구라(오류 수정)

오류내역) java.sql.SQLException

lshfood2 2025. 11. 4. 11:58

SQL 쿼리문에 오류가 발생했을 확률이 높다.

 

▼ 기존 코드 (오류 발생)

private static final String SELECT_ONE = "SELECT * FROM BOARD B LEFT OUTER JOIN MEMBER M ON B.MID = M.MID WHERE B.BID = 101";

try {
	pstmt = conn.prepareStatement(SELECT_ONE);
	pstmt.setInt(1, boardDTO.getBid());
	ResultSet rs = pstmt.executeQuery();
	if(rs.next()) {
		data = new BoardDTO();
		data.setBid(rs.getInt("BID"));
		data.setTitle(rs.getString("TITLE"));
		data.setContent(rs.getString("CONTENT"));
		data.setMid(rs.getString("MID"));
		data.setBcount(rs.getInt("BCOUNT"));
	}
} catch (SQLException e) {
	e.printStackTrace();
} finally {
	JDBCUtil.disconnect(conn, pstmt);
}

 

▼ 오류 해결 부분

private static final String SELECT_ONE = "SELECT * FROM BOARD B LEFT OUTER JOIN MEMBER M ON B.MID = M.MID WHERE B.BID = ?";
//기존 코드에 ? 대신 SQL에서 가져온 숫자 101이 그대로 기재되어 있었음

SELECT * FROM BOARD B

LEFT OUTER JOIN MEMBER M

ON B.MID = M.MID

WHERE B.BID = 101;

BOARD.sql 에서 쿼리문을 가져올 때

테스트용으로 사용했던 쿼리문을 그대로 가져온 뒤

파라미터화(? 처리)가 누락되어 사용자 값이 101로 고정되었고

try {

pstmt = conn.prepareStatement(SELECT_ONE);

pstmt.setInt(1, boardDTO.getBid());

ResultSet rs = pstmt.executeQuery();

해당 과정이 처리될 수 없었다.

 

101을 다시 ?로 파라미터화 하면

정상적으로 실행된다.

 

SELECT * FROM BOARD B 

LEFT OUTER JOIN MEMBER M 

ON B.MID = M.MID 

WHERE B.BID = ?;

 

해결!