Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 你有什么奇怪的行为?_Android_Sqlite - Fatal编程技术网

Android 你有什么奇怪的行为?

Android 你有什么奇怪的行为?,android,sqlite,Android,Sqlite,我编写了这个rawQuery,它给了我一个空游标: String query = "SELECT * FROM " + TBL_NAME + " WHERE ? = ?"; String[] args = new String[] {COL_NAME, Long.toString(id)}; Cursor c = db.rawQuery(query, args); 但如果我执行以下查询,我会得到预期的结果: String query = "SELECT * FROM " + TBL_NAME

我编写了这个rawQuery,它给了我一个空游标:

String query = "SELECT * FROM " + TBL_NAME + " WHERE ? = ?";
String[] args = new String[] {COL_NAME, Long.toString(id)};
Cursor c = db.rawQuery(query, args);
但如果我执行以下查询,我会得到预期的结果:

String query = "SELECT * FROM " + TBL_NAME + " WHERE " + COL_NAME + " = " + Long.toString(id);
Cursor c = db.rawQuery(query, null);
我发现我不能将表名用作“rawQuery”方法的参数之一。但我不确定为什么不能(我认为它围绕着论点用“”,但这只是一个猜测)

除此之外,我得出的结论是,args应该只用于将用户输入包含到查询中,在这方面,似乎最好使用
SQLiteStatement


总之:我应该在哪里(如果可能的话,为什么)在rawQuery中使用args(而不是仅仅在字符串中串联)。为什么我要用rawQuery来代替SQLiteStatement(或者干脆用query)?

据我所知,COL_名称不能替换为“?”。 Android只将“?”作为“参数”,而不是“选择”

或者最好使用这种方法

query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy)
在您的情况下,它将是这样的:

final String[] args = new String[] {Long.toString(id)};
final Cursor c = db.query(TBL_NAME, null, COL_NAME + "=?", args, null, null, null);

我知道文档,但我认为有点误导:“您可能在查询的where子句中包含?s,它将被selectionArgs中的值替换”,我在where子句中使用它们(结果不正确)。我没有接受你的答案,因为我对带(和不带)参数的rawQuery、SQLiteStatement和偶数查询之间的差异(如果相关)感兴趣。因为我开始在我的脑海中制造混乱。如果说“被SelectionAgs中的值替换”。COL_名称称为“selection”,而“id”则是“selectionArgs”。这就是它不起作用的原因。
final String[] args = new String[] {Long.toString(id)};
final Cursor c = db.query(TBL_NAME, null, COL_NAME + "=?", args, null, null, null);