动态 SQLite 查询
Dynamic SQLite queries
我正在尝试在我的 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 测试了这个查询,它应该 return 只有列 id_proyecto
等于参数 idProyecto 的行,或者如果 idProyecto 等于 0 的每一行。但它不会 return 任何东西。如果我删除 WHERE 子句并将 "parametros" 替换为 "null",它工作正常。
此外,我需要使用 LIKE 按文本值进行搜索。例如,WHERE col_name LIKE strName + '%' OR strName = ''
。我应该如何格式化我的参数和查询以使其工作?
你应该为每个案例做一个查询。对于存在的 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
如果您正在查找完全匹配的内容。
我正在尝试在我的 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 测试了这个查询,它应该 return 只有列 id_proyecto
等于参数 idProyecto 的行,或者如果 idProyecto 等于 0 的每一行。但它不会 return 任何东西。如果我删除 WHERE 子句并将 "parametros" 替换为 "null",它工作正常。
此外,我需要使用 LIKE 按文本值进行搜索。例如,WHERE col_name LIKE strName + '%' OR strName = ''
。我应该如何格式化我的参数和查询以使其工作?
你应该为每个案例做一个查询。对于存在的 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
如果您正在查找完全匹配的内容。