Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.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 SQLite和Room持久性库:如何在条件和类似条件下组合?_Android_Sqlite_Android Sqlite_Android Room - Fatal编程技术网

Android SQLite和Room持久性库:如何在条件和类似条件下组合?

Android SQLite和Room持久性库:如何在条件和类似条件下组合?,android,sqlite,android-sqlite,android-room,Android,Sqlite,Android Sqlite,Android Room,我很难用谷歌搜索这一个,但希望这对专家(甚至是中间人)来说不是太棘手 有没有办法在未知数量的多个或多个条件中搜索子字符串 Android SQLite Room持久性DAO的原始查询为: SELECT country FROM table WHERE country IN (:searchList) 如果给定一个搜索列表['Paris,France','Berlin,Germany'],它将转换为SQL: SELECT country FROM table WHERE country IN (

我很难用谷歌搜索这一个,但希望这对专家(甚至是中间人)来说不是太棘手

有没有办法在未知数量的多个或多个条件中搜索子字符串

Android SQLite Room持久性DAO的原始查询为:

SELECT country FROM table WHERE country IN (:searchList)
如果给定一个搜索列表['Paris,France','Berlin,Germany'],它将转换为SQL:

SELECT country FROM table WHERE country IN ( 'Paris, France', 'Berlin, Germany' );
并将返回:[“法国巴黎”、“德国柏林”]

然而,我希望能够通过国家搜索。例如,给定一个[‘法国’、‘德国’]的搜索列表,我很遗憾没有得到任何结果

我知道下面的SQL可以做到这一点:

SELECT country FROM table  WHERE country LIKE '%France%' OR country LIKE '%Germany%';
但是,因为我不知道搜索列表中有多少元素,所以我必须使用原始格式:

SELECT country FROM table WHERE country IN (:searchList)
有没有办法在国家/地区列中进行上述子字符串搜索

非常感谢你的帮助


Dan

由于Androids Sqlite未随Regex一起提供,因此在搜索列表之前,您需要拆分列表

SQLite IN操作符对列表进行排序,并使用二进制搜索,这比在这种情况下使用单个查询快得多

性能或vs以比较速度(遗憾的是,不适用于批处理查询)


由于androids sqlite(版本)在搜索查询中不支持regexp,您可能希望将列表(:searchList)拆分为单个单词?示例:我希望避免拆分searchList,因为这样我就必须对DB执行多个调用-searchList的每个元素一个调用。谢谢您的回答。这是一个遗憾:)我想我将要做的是为每个条目添加一个国家行,这样一个UID将同时链接到“柏林,德国”和“德国”。是的,我知道,但这是房间。。我将其用于非常大的项目,并且到目前为止它是稳定的,但这并不意味着它现在是最终的;-)Sqlite的一些端口支持正则表达式。如果您得到所有结果,或者至少是按组并在之后使用选择/过滤器,您可能希望对速度进行基准测试。很好。我会密切关注更新,但现在增加一行就可以了。问题不在于速度有多快,搜索的位置不应该超过20个,而在于可变性——我不知道要搜索多少个位置,所以我无法事先创建具有正确数量的OR的SQL。
SELECT COUNT(*) FROM t_inner WHERE val IN (1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000, 9000);
1 row fetched in 0.0032 (1.2679 seconds)

SELECT COUNT(*) FROM t_inner WHERE val = 1000 OR val = 2000 OR val = 3000 OR val = 4000 OR val = 5000 OR val = 6000 OR val = 7000 OR val = 8000 OR val = 9000;
1 row fetched in 0.0026 (1.7385 seconds)