1

如何使用 SQLiteDatabase.query 进行查询?

"Select * from table where col1 = something AND col2 IS NOT NULL"

我尝试将 col2 与 =? 在选择字符串和选择参数中的 NOT NULL 但它不起作用。

请告诉我哪里出错了。

4

3 回答 3

3

selectionArgs是一个字符串数组,只能用于字符串值。

当您使用col2 = ?stringNOT NULL时,您是在告诉数据库检查列的值是否是八个字符的 string "NOT NULL"

您必须col2 IS NOT NULL直接写入selection字符串:

db.query("MyTable", null,
         "col1 = ? AND col2 IS NOT NULL",
         new String[] { "something" },
         null, null, null);
于 2013-11-06T10:10:04.027 回答
0

您可以使用CursorrawQuery

Cursor c=db.rawQuery(your_query,null) 
于 2013-11-06T10:04:20.243 回答
0
public Cursor query (String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy) 

查询给定的表,返回结果集上的游标。

参数 table 要编译查询的表名。

columns

要返回的列的列表。传递 null 将返回所有列,不鼓励这样做以防止从存储中读取不会使用的数据。

selection 

一个过滤器,声明要返回哪些行,格式化为 SQL WHERE 子句(不包括 WHERE 本身)。传递 null 将返回给定表的所有行。

selectionArgs

您可以在选择中包含 ?s,它将被 selectionArgs 中的值替换,以便它们出现在选择中。这些值将绑定为字符串。

groupBy

一个过滤器,声明如何对行进行分组,格式化为 SQL GROUP BY 子句(不包括 GROUP BY 本身)。传递 null 将导致行不被分组。

having

过滤器声明要在游标中包含哪些行组,如果正在使用行分组,则格式化为 SQL HAVING 子句(不包括 HAVING 本身)。传递 null 将导致包含所有行组,并且在不使用行分组时是必需的。

orderBy

如何对行进行排序,格式化为 SQL ORDER BY 子句(不包括 ORDER BY 本身)。传递 null 将使用默认排序顺序,可能是无序的。

所以你可以这样尝试

String[] args = { "first string", "second@string.com" };
Cursor cursor = db.query("TABLE_NAME", null, "name=? AND email=?", args, null,null,null);
于 2013-11-06T10:32:39.103 回答