2011-01-21 4 views

Respuesta

9

intentar algo como eso ..

SQLiteDatabase db = YourDatabaseHelper.getReadableDatabase(); 
String TABLE = "CONTACT_TAGS"; 
String[] FIELDS = { "_id" }; 
String WHERE = "TAG1='tagname' OR TAG2='tagname' OR TAG3='tagname' OR TAG4='tagname' OR TAG5='tagname' "; 
// Execute 
cursor = db.query(TABLE, FIELDS, WHERE, null, null, null, null); 

Si usted lee la documentación del método Cursor.query() a encontrar la definición para selection de la siguiente manera:

selección: A filtro declari ng qué filas devolver, formateadas como una cláusula SQL WHERE (excluyendo WHERE). Al pasar nulo, devuelve todas las filas para la tabla dada.

45

Si desea utilizar la optimización integrada en la conexión androide SQLite que podría hacer algo como esto en su lugar:

String table = "CONTACT_TAGS"; 
String[] columns = {"_id"}; 
String where = "TAG1=? OR TAG2=? OR TAG3=? OR TAG4=? OR TAG5=?"; 
String[] args = {"tagname", "tagname", "tagname", "tagname", "tagname"}; 

SQLiteDatabase db = myDatabaseHelper.getReadableDatabase(); 
Cursor cursor = db.query(table, columns, where, args, null, null, null); 

La diferencia de la solución de @ raultum es que deja que el conector de base de datos de decidir cómo interpretar los datos enviados. Esto es muy interesante desde una perspectiva de seguridad.

+2

Usted quiere hacer con esta solución como se usa el argumento 'args' apropiadamente para usarlo para evitar inyecciones de SQL – philipp

+2

¿Alguien alguna vez ha conseguido que esto funcione? Cuando lo intento, sale el '?' en todos los campos en lugar de sustituir en mis argumentos. – schwiz

2

Se puede utilizar como la

cadena strSelection = android.provider.CallLog.Calls.TYPE + "=" + CallLog.Calls.MISSED_TYPE + "o" + + android.provider.CallLog.Calls.TYPE "=" + CallLog.Calls.INCOMING_TYPE;

Cuestiones relacionadas