如何使用 SQLiteDatabase.query 进行查询?
"Select * from table where col1 = something AND col2 IS NOT NULL"
我尝试将 col2 与 =? 在选择字符串和选择参数中的 NOT NULL 但它不起作用。
请告诉我哪里出错了。
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);
您可以使用Cursor
和rawQuery
Cursor c=db.rawQuery(your_query,null)
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);