Android SQL查询多个WHERE参数

Android SQL查询多个WHERE参数,android,android-sqlite,where-in,Android,Android Sqlite,Where In,由于某种原因,我的sql.query由于其格式化方式而失败。我不知道为什么。它不会崩溃,也不会抛出错误。它只是不返回值。我在查询中使用了两个WHERE参数。我在Log.d中看到这两个参数都成功地传递给了方法 public static String fetchLightTableD(String flightRowId, String filenamePrefix){ String[] lightcolumns = new String[] { KEY_ROWID, KEY_TID,

由于某种原因,我的sql.query由于其格式化方式而失败。我不知道为什么。它不会崩溃,也不会抛出错误。它只是不返回值。我在查询中使用了两个WHERE参数。我在Log.d中看到这两个参数都成功地传递给了方法

public static String fetchLightTableD(String flightRowId, String filenamePrefix){

    String[] lightcolumns = new String[] { KEY_ROWID, KEY_TID, KEY_NAME, KEY_LUXVALUE, KEY_TRANSMITTED };
    Log.d("CSV", "SQL fetchLightTableD, revceived tid - " + filenamePrefix + " " + flightRowId);
    Cursor lightcursor = myDatabase.query(LIGHT_TABLE, lightcolumns, KEY_TID + "=" + filenamePrefix + " AND " + KEY_ROWID + "=" + flightRowId, null, null, null, null);
    String lightTableResults = "";

    int iRowId = lightcursor.getColumnIndex(KEY_ROWID);
    int iTid = lightcursor.getColumnIndex(KEY_TID);
    int iName = lightcursor.getColumnIndex(KEY_NAME);
    int iLux = lightcursor.getColumnIndex(KEY_LUXVALUE);
    int iTrans = lightcursor.getColumnIndex(KEY_TRANSMITTED);

    for (lightcursor.moveToFirst(); !lightcursor.isAfterLast(); lightcursor
            .moveToNext()) {
        lightTableResults = lightTableResults
                + lightcursor.getString(iRowId) + ","
                + lightcursor.getString(iTid) + ","
                + lightcursor.getString(iName) + ","
                + lightcursor.getString(iLux) + ","
                + lightcursor.getString(iTrans) + "\n";


    }

    return lightTableResults;

}
它应该在表中筛选与rowid和filenameprefix匹配的行。我还测试了删除一个或另一个参数,以确保实际存在值。当然有,所以我的和有问题。有人能看出哪里不正确吗

等效值应为:

SELECT lightcolumns 
FROM LIGHT_TABLE 
WHERE KEY_TID=rowid AND KEY_TID=filenamePrefix;

像这样使用您的查询

 Cursor lightcursor = myDatabase.query(LIGHT_TABLE,lightcolumns,
            KEY_TID "=?"+ " AND " + KEY_ROWID +"=?",
            new String[] { filenamePrefix , flightRowId},null, null, null);
而不是

Cursor lightcursor = myDatabase.query(LIGHT_TABLE, lightcolumns, KEY_TID + "=" + filenamePrefix + " AND " + KEY_ROWID + "=" + flightRowId, null, null, null, null);
试试这个

String Query = "SELECT " + lightcolumns + " FROM "+ LIGHT_TABLE + " WHERE " + KEY_TID + " = "+ rowid + " AND " + KEY_TID + " = " +filenamePrefix ; 

Cursor lightcursor = myDatabase.rawquery(Query ,null);

如果
filenameprifix
是一个字符串,正如我强烈怀疑的那样,那么必须用“(单引号)将其值括起来,从技术上讲,这两个字符串都是字符串。如果我删除TID的WHERE,则其功能正常。用单引号将其括起来不起作用。请阅读有关字符串[]SelectionAgs参数的信息。做得好。我将研究为什么这种论证形式有效,而不是原始的。毫无意义。