动态 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 如果您正在查找完全匹配的内容。