public List<Notice> getList(int page, String field, String query) throws ClassNotFoundException, SQLException{
String sql="SELECT * FROM NOTICE_VIEW WHERE"+field+" LIKE NUM BETWEEN ? AND ?";
Class.forName(driver);
Connection con = DriverManager.getConnection(url,uid,pwd);
PreparedStatement st = con.prepareStatement(sql);
st.setString(1,"%"+query+"%");
st.setInt(2, start);
st.setInt(3, end);
⁝
해당 코드를 보면 왜 BETWEEN ? AND ?에는 setInt로 값을 지정하는데
WHERE"+field+" LIKE 에는 ?를 안 쓰는지 (setString을 안쓰는지) 궁금할 수 있다.
그 이유는 간단하다. set???함수는 값으로 전달하기 때문이다.
setString으로 전달하면 해당코드는
SELECT * FROM NOTICE_VIEW WHERE 'field' LIKE NUM BETWEEN '1' AND '10' ;
과 같이 작성이 된다.
BETWEEN '1' AND '10'은 문제가 없다. 값으로 전달해도 정상 출력된다.
하지만 컬럼부분을 값으로 전달하면 오류가 뜨게 된다. 그렇기 때문에 컬럼부분은 setString으로 전달하지 않는 것이다.
st.setString(1,"%"+query+"%");
이 문장은 위의 예시와 조금 다르다.
LIKE의 작성법은
.SELECT컬럼명 FROM테이블 WHERE컬럼명 LIKE'%A%'
위와 같기 때문에 setString으로 전달해도 전혀 문제없다.
'2022 > Oracle' 카테고리의 다른 글
Oracle-SQL 컬럼의 갯수를 세는 SQL문 (0) | 2021.12.29 |
---|---|
Oracel-SQL VIEW만들기 (0) | 2021.12.29 |
Oracel-SQL VIEW만들기 (0) | 2021.12.29 |
Oracle-SQL ROWNUM 작성법 (0) | 2021.12.28 |
Oracle-SQL ROWNUM이 >1일때 왜 출력이 안될까? (0) | 2021.12.28 |