데이터베이스에서 원하는 형태의 문자열을 찾고 싶은 경우 like문을 활용할 수 있다. 이런 경우 아래와 같이 코드를 작성하면 에러가 발생한다.
// 생략
String sql = "SELECT * FROM users WHERE name LIKE '?'";
try (Connection connection = DriverManager.getConnection(dbUrl, dbUser, dbPasswd);
PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
preparedStatement.setString(1, keyword);
// 생략
이런 경우 preparedStatement에서 sql문의 ?를 인식하지 못하여 전달할 파라미터가 없다고 판단하는 것 같다. 즉, 파라미터가 없는데 우리가 preparedStatement.setString(1, keyword);에서 파라미터를 넘겨주므로 에러가 발생하는 것이다. 이런 경우 아래와 같이 코드를 작성하면 올바르게 동작한다.
// 생략
String sql = "SELECT * FROM users WHERE name LIKE ?";
try (Connection connection = DriverManager.getConnection(dbUrl, dbUser, dbPasswd);
PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
preparedStatement.setString(1, "%"+keyword+"%");
// 생략
'BackEnd > JDBC' 카테고리의 다른 글
[JDBC] MySQL Datetime 타입 저장 방법 (0) | 2023.01.31 |
---|---|
[JDBC] DTO/DAO/VO 간단한 정리 (0) | 2023.01.26 |
JDBC 예제 코드 (select, insert, delete) (0) | 2022.12.26 |
JDBC란? (0) | 2022.12.26 |