Java에서 MySQL 데이터베이스를 검색할 때 LIKE 절과 함께 검색 변수를 사용하려면 문자열을 연결하는 과정에서 작은따옴표(')를 정확한 위치에 배치해야 합니다. 아래는 검색 변수와 함께 LIKE를 사용하는 올바른 문법입니다.
String sqlQuery; sqlQuery = "select *from yourTableName where yourColumnName like '%" + yourSearchVariableName + "%'";
테이블 생성하기
먼저 실습에 사용할 테이블을 생성해 보겠습니다.
mysql> create table demo19 -> ( -> id int not null auto_increment primary key, -> name varchar(50) -> ); Query OK, 0 rows affected (3.48 sec)
레코드 삽입하기
insert 명령을 사용하여 테이블에 샘플 데이터를 추가합니다.
mysql> insert into demo19(name) values('John Smith');
Query OK, 1 row affected (0.15 sec)
mysql> insert into demo19(name) values('David Miller');
Query OK, 1 row affected (0.15 sec)
mysql> insert into demo19(name) values('Adam Smith');
Query OK, 1 row affected (0.12 sec)
mysql> insert into demo19(name) values('Chris Brown');
Query OK, 1 row affected (0.13 sec)레코드 조회하기
select 문으로 테이블에 저장된 전체 레코드를 확인합니다.
mysql> select *from demo19
위 쿼리는 다음과 같은 결과를 출력합니다.
+----+--------------+ | id | name | +----+--------------+ | 1 | John Smith | | 2 | David Miller | | 3 | Adam Smith | | 4 | Chris Brown | +----+--------------+ 4 rows in set (0.00 sec)
Java 예제 코드
다음은 검색 변수와 함께 LIKE를 사용할 때 따옴표를 올바르게 처리하는 Java 코드입니다. 이 예제에서는 "Smith"라는 키워드로 이름을 검색합니다.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class RemoveJavaQueryError {
public static void main(String[] args) {
Connection con = null;
Statement statement = null;
try {
String searchKeyWord = "Smith";
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/sampledatabase", "root", "123456");
statement = (Statement) con.createStatement();
String sqlQuery;
sqlQuery = "select *from demo19 where name like '%" + searchKeyWord + "%'";
ResultSet rs = statement.executeQuery(sqlQuery);
while (rs.next()) {
System.out.println(rs.getString("name"));
}
} catch (Exception e) {
e.printStackTrace();
}
}
}프로그램을 실행하면 이름에 "Smith"가 포함된 레코드만 조회되어 다음과 같은 결과가 출력됩니다.
John Smith Adam Smith
아래는 샘플 출력 화면입니다.

참고: PreparedStatement 사용 권장
문자열 연결 방식은 SQL 인젝션(SQL Injection) 공격에 취약할 수 있습니다. 실무 환경에서는 아래와 같이 PreparedStatement를 사용해 매개변수를 바인딩하는 것이 더 안전하고 권장되는 방법입니다.
String sqlQuery = "select *from demo19 where name like ?"; PreparedStatement ps = con.prepareStatement(sqlQuery); ps.setString(1, "%" + searchKeyWord + "%"); ResultSet rs = ps.executeQuery();