2015-02-01 2 views
5

Po wyświetleniu bazy danych i uruchomieniu tego zapytania uzyskuję wyniki zgodnie z oczekiwaniami.Wybór SQLite z instrukcji LIKE nie działa?

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

Jednak kiedy używać przygotowaną instrukcję, jak widać poniżej, UUID jest 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); 
} 

Dla powyższego kodu nic nie jest zwracane w zestawie wyników. Co jest bardzo dziwne, ponieważ użyłem tego samego zapytania z przeglądarką SQLite i zwróciłem odpowiednie wiersze. Jak mogę to rozwiązać? Nie widzę problemu.

UPDATE

Kiedy korzystać bezpośrednio "SELECT * FROM factions WHERE claims LIKE '%[-15,-3]%'" w przygotowanym oświadczeniu zamiast zmiennej, to działa dobrze. Dlaczego nie mogę użyć zmiennej łańcuchowej? Sprawdziłem zmienną i drukuje do konsoli dobrze.

Odpowiedz

6

Rozwiązałem go po wielu próbach i błędach, okazało się, że powinienem był użyć ? i ustawić ciąg.

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

ps.setString(1, "%" + opt + "%");