2015-02-01 2 views
5

데이터베이스를보고이 쿼리를 실행하면 예상대로 결과가 나타납니다.SQLite select에서 LIKE 문이 작동하지 않습니까?

SELECT * FROM users WHERE options LIKE '%[-15,-3]%'; 

그러나 아래와 같이 준비된 문을 사용할 때 uuid는 null입니다.

String opt = "[-15,-3]"; //example 

PreparedStatement ps = SQLite.connection.prepareStatement(
    "SELECT * FROM users WHERE options LIKE '%" + opt + "%'" 
    ); 

ResultSet rs = ps.executeQuery(); 
String uuid = null; 

while (rs.next()){ 
    uuid = rs.getString("member"); 
} 

rs.close(); 
ps.close(); 

if(uuid != null){ 
    System.out.println("not null: " + uuid); 
    return Database.getUser(UUID.fromString(uuid); 
} 

위 코드의 경우 결과 집합에 아무 것도 반환되지 않습니다. SQLite 뷰어에서 같은 쿼리를 사용하고 적절한 행을 반환했기 때문에 매우 이상합니다. 이 문제를 어떻게 해결할 수 있습니까? 나는 문제가 보이지 않는다. 내가 직접 준비된 명령문 대신 변수에 "SELECT * FROM factions WHERE claims LIKE '%[-15,-3]%'"를 사용하는 경우

UPDATE는

, 그것을 잘 작동합니다. 왜 문자열 변수를 사용할 수 없습니까? 내가 변수를 확인하고 잘 콘솔에 인쇄합니다.

답변

6

많은 시행 착오 끝에 해결했는데 ?을 사용해야하고 문자열을 설정해야합니다.

PreparedStatement ps = SQLite.connection.prepareStatement(
     "SELECT * FROM users WHERE options LIKE ?" 
); 

ps.setString(1, "%" + opt + "%"); 
관련 문제