我试图在我的Android应用中实施动态查询,让用户根据某些条件进行搜索。在这种情况下,我试图仅通过整数值进行搜索。这是我的尝试:
...
public String[][] listarNegocio(int idProyecto,
int minimo,
int maximo)
{
String[][] arrayDatos = null;
String[] parametros = {String.valueOf(idProyecto)};
Cursor cursor = null;
cursor = querySQL("SELECT *" +
" FROM negocio" +
" WHERE ? in (0, id_proyecto)", parametros);
if(cursor.getCount() > 0)
{
int i = minimo - 1;
arrayDatos = new String[maximo - minimo + 1][20];
while(cursor.moveToNext() && i < maximo)
{
// Here I fill the array with data
i = i + 1;
}
}
cursor.close();
CloseDB();
return(arrayDatos);
}
public Cursor querySQL(String sql, String[] selectionArgs)
{
Cursor oRet = null;
// Opens the database object in "write" mode.
db = oDB.getReadableDatabase();
oRet = db.rawQuery(sql, selectionArgs);
return(oRet);
}
...
我使用SQLFiddle测试了这个查询,它应该只返回列id_proyecto
等于参数idProyecto的行,或者如果idProyecto等于0则返回每一行。但它不会返回任何内容。如果我删除WHERE子句并替换&#34; parametros&#34;使用&#34; null&#34;,它可以正常工作。
此外,我需要使用LIKE按文本值进行搜索。例如,WHERE col_name LIKE strName + '%' OR strName = ''
。我应该如何格式化我的参数和查询以使其工作?
答案 0 :(得分:1)
您应该为每个案例执行一次查询。对于存在的ID,请执行SELECT * FROM negocio WHERE id_proyecto = ?
。对于不存在的id(我假设0不是真正的id),只需使用SELECT * FROM negocio
查询所有内容。
代码应该是这样的:
if(parametros[0] != 0){
cursor = querySQL("SELECT *" +
" FROM negocio" +
" WHERE id_proyecto = ?", parametros);
} else {
cursor = querySQL("SELECT *" +
" FROM negocio", null);
}
关于您的第二个问题,这取决于您要查找的内容,您可以在文字之间使用LIKE '%param%'
或CONTAINS
,部分匹配使用LIKE param
或仅= param
1}}如果你看起来完全匹配。