2011-10-04 20 views
9

Jestem nowa w tym, pomóż mi.Funkcja Android likemlite() nie działa

Próbuję użyć funkcji lubmlite (nazwa kolumny, wartość), ale to nie działa dla mnie. Ale kiedy testuję pełny tekst, działa on jak funkcja "eq".

mój kod jest

try { 
    QueryBuilder<MakeDTO, Integer> qb = makeDao.queryBuilder(); 
    qb.where().like("madeCompany", filterKey); 
    PreparedQuery<MakeDTO> pq = qb.prepare(); 
    return makeDao.query(pq); 
} catch (SQLException e) { 
    throw new AppException(e); 
} 

Dzięki.

Odpowiedz

11

Całkiem proste, prosisz go dokładnie ciąg „madeCompany”, jeśli chcesz zrobić częściowe dopasowanie trzeba użyć% wieloznaczny itp

public Where<T,ID> like(java.lang.String columnName, 
         java.lang.Object value) 
       throws java.sql.SQLException 
Add a LIKE clause so the column must mach the value using '%' patterns. 
Throws: 
java.sql.SQLException 

Where.like(java.lang.String, java.lang.Object)

29

Stare pytanie, ale coś, co właśnie rozwiązałem (dokumentacja ORMLite nie jest aż tak oczywista). musisz zawijać parametr zapytania w "%", aby powiedzieć ORMLite, która strona ciągu zapytania może odpowiadać dowolnej liczbie znaków.

Na przykład, jeśli chcesz zapytanie pasują do każdej madeCompany który zawiera ciąg użyć następujących:

try { 
    QueryBuilder<MakeDTO, Integer> qb = makeDao.queryBuilder(); 
    qb.where().like("madeCompany", "%"+filterKey+"%"); 
    PreparedQuery<MakeDTO> pq = qb.prepare(); 
    return makeDao.query(pq); 
} catch (SQLException e) { 
    throw new AppException(e); 
} 
+0

pomógł mi. Dzięki człowieku :) – Shirane85

+1

dopilnuj, aby dodać również apostrof do pracy: qb.where(). Like ("madeCompany", "'%" + filterKey + "%" "); –

+0

@Justin: Dzięki za fragment kodu. Właściwie to chcę zapytać coś w stylu: "Jeśli napiszę B, powinien najpierw wyświetlić ciągi B, a następnie ciągi zawierające B (chociaż zaczyna się od A)". Czy to jest sposób na to? –

1

Odpowiedzi powyżej może rozwiązał podobny problem, kwerendy, ale ma ryzyka SQL injection. Jeśli wartość 'filterKey' jest ', spowoduje to SQLException, ponieważ SQL będzie SELECT * FROM XXX WHERE xxx LIKE'% '%'. Można użyć SelectArg uniknąć, na przykład takiej sytuacji:

try { 
    String keyword = "%"+filterKey+"%"; 
    SelectArg selectArg = new SelectArg(); 
    QueryBuilder<MakeDTO, Integer> qb = makeDao.queryBuilder(); 
    qb.where().like("madeCompany", selectArg); 
    PreparedQuery<MakeDTO> pq = qb.prepare(); 
    selectArg.setValue(keyword); 
    return makeDao.query(pq); 
} catch (SQLException e) { 
    throw new AppException(e); 
} 

referencyjny: http://ormlite.com/javadoc/ormlite-core/doc-files/ormlite_3.html#index-select-arguments