【发布时间】: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