【问题标题】:Android SQL Query multiple WHERE argsAndroid SQL 查询多个 WHERE 参数
【发布时间】:2014-08-22 21:39:15
【问题描述】:

由于某种原因,我的 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 和文件名前缀匹配的行的表。我还测试了删除一个或其他 WHERE 参数以确保值确实存在。他们当然有,所以我的 AND 有问题。谁能看出哪里不对?

等价的应该是这样的:

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

【问题讨论】:

  • 如果filenamePrefix 是一个字符串,我强烈怀疑,你必须用'(单引号)括起来它的值
  • 从技术上讲,两者都是字符串。如果我删除 TID 的 WHERE,那么它可以正常工作。用单引号括起来不起作用。
  • 了解 String[] selectionArgs 参数

标签: android android-sqlite where-in


【解决方案1】:

试试这个

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

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

【讨论】:

    【解决方案2】:

    像这样使用您的查询

     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);
    

    【讨论】:

    • 干得好。我将研究为什么这种参数格式有效,而不是原来的。没有意义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-17
    • 2012-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多