在一个列中查询多个值的Sqlite查询
问题:在SQLite中如何查询某一列中多个值的数据?
原因:在某些情况下,我们需要查询某一列中包含多个特定值的数据。然而,通常情况下,SQLite查询中的IN操作符只能接受一个值,而不能直接接受多个值。因此,我们需要找到一种解决方法。
解决方法:通过使用占位符和字符串拼接的方式,可以实现在SQLite查询中查询多个值。以下是一个示例代码:
cursor = database.query(tablename, new String[] { "TopName" }, "id IN (?)", new String[]{"2,3"}, null, null, null);
在上面的代码中,我们使用了一个占位符"?"来代替多个值,然后通过使用字符串数组的方式传递多个值。在这个例子中,我们查询了id列中包含值为2和3的数据。
这样,就能够实现在SQLite查询中查询多个值的要求了。
问题原因:在使用Android的ContentProvider中的IN操作符时,如果不正确使用引号将每个逗号分隔的值括起来,整个字符串将被视为列的一个值。
解决方法:在使用IN操作符时,在参数中的每个逗号分隔的值周围添加单引号。这样可以确保每个值被视为列的一个值。
代码示例:
cursor = database.query(contentUri, projection, "columnName IN(?,?)", new String[]{"value1" , "value2"}, sortOrder);
或者可以使用以下代码:
cursor = database.query(contentUri, projection, "columnName IN(?)", new String[] {" 'value1' , 'value2' "}, sortOrder);
需要注意的是,在第二种情况下,需要在参数中的每个逗号分隔的值周围添加单引号,否则整个字符串将被视为列的一个值。SQL将会将其视为:
SELECT * FROM table WHERE columnName IN ('value1,value2')
而不是正确的语法:
SELECT * FROM table WHERE columnName IN ('value1' , 'value2')
通过正确使用引号,可以解决在一个列中使用多个值的问题。