2011-10-04 18 views
9

Soy nuevo en esto, por favor ayúdame.Android ormlite like() la función no funciona

Estoy tratando de usar ormlite como (nombre de columna, valor) función, pero esto no funciona para mí. Pero cuando pruebo el texto completo, funciona como la función "eq".

Mi código es,

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); 
} 

Gracias.

Respuesta

11

Bastante simple, usted está pidiendo que sea exactamente el 'madeCompany' cadena, si usted quiere hacer la concordancia parcial es necesario utilizar el comodín%, etc.

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

Una vieja pregunta, pero algo que acabo de resolver (la documentación de ORMLite no está tan clara). debe ajustar su parámetro de consulta en "%" para indicarle a ORMLite qué lado de su cadena de consulta puede coincidir con cualquier número de caracteres.

Por ejemplo, si desea que su consulta para combinar con cualquier madeCompany que contenga su cadena use el siguiente:

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

me ayudó. Gracias hombre :) – Shirane85

+1

asegúrate de agregar también apóstrofo al trabajo: qb.where(). Like ("madeCompany", "'%" + filterKey + "%'"); –

+0

@Justin: gracias por el fragmento de código. En realidad, quiero una consulta algo así como, "Si escribo B, primero debería mostrar las cadenas de B y luego las cadenas que contienen B (aunque está comenzando con A)". ¿Es una forma de eso? –

1

Las respuestas anteriores pueden resolverse el problema de consulta como, pero tiene el riesgo de inyección SQL. Si el valor de 'filterKey' es ', causará SQLException, porque el SQL será SELECT * FROM XXX WHERE xxx LIKE'% '%'. Se podría utilizar para evitar SelectArg, ejemplo para este caso:

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); 
} 

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