动态SQLite查询

时间:2015-02-17 17:07:02

标签: android sqlite

我试图在我的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 = ''。我应该如何格式化我的参数和查询以使其工作?

1 个答案:

答案 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}}如果你看起来完全匹配。