Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.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
Java 选择查询以在表中多次拾取连续行_Java_Sqlite_Select_Android Sqlite_Android Room - Fatal编程技术网

Java 选择查询以在表中多次拾取连续行

Java 选择查询以在表中多次拾取连续行,java,sqlite,select,android-sqlite,android-room,Java,Sqlite,Select,Android Sqlite,Android Room,我在Android Room数据库中有多个表,每个表中有超过100K条记录,并且使用MVVM模式 每个表有两列,一个id(主键)和一个字符串列 要求:以多个间隔选择间隔长度已知的连续行 说明:假设由于一些背景计算,我有一个200的区间,区间从300开始,到500结束。在表中每2K记录一次之后,我需要选择这200(500-300=200)行。所以在这种情况下,查询应该选择下面所写模式中的200行 对于前2K记录,从300到500的行 第二个2K记录中从2300到2500的行 第三个2K记录中从43

我在Android Room数据库中有多个表,每个表中有超过100K条记录,并且使用MVVM模式

每个表有两列,一个id(主键)和一个字符串列

要求:以多个间隔选择间隔长度已知的连续行

说明:假设由于一些背景计算,我有一个200的区间,区间从300开始,到500结束。在表中每2K记录一次之后,我需要选择这200(500-300=200)行。所以在这种情况下,查询应该选择下面所写模式中的200行

对于前2K记录,从300到500的行

第二个2K记录中从2300到2500的行

第三个2K记录中从4300到4500的行

同样地,直到桌子的尽头

目前我正在这样安排查询,因为我知道时间间隔

s1和e1分别为300和500

s2和e2分别为2300和2500

s3和e3分别是4300和4500,以此类推

 @Query("SELECT * FROM CATEGORY_TABLE WHERE (id BETWEEN :s1 AND :e1 ) OR (id BETWEEN :s2 AND :e2 ) OR (id BETWEEN :s3 AND :e3 ) OR (id BETWEEN :s4 AND :e4 ) OR (id BETWEEN :s5 AND :e5 ) " +
            "OR (id BETWEEN :s6 AND :e6 ) OR (id BETWEEN :s7 AND :e7 ) OR (id BETWEEN :s8 AND :e8 ) OR (id BETWEEN :s9 AND :e9 ) OR (id BETWEEN :s10 AND :e10 ) OR" +
            " (id BETWEEN :s11 AND :e11 ) OR (id BETWEEN :s12 AND :e12 ) OR (id BETWEEN :s13 AND :e13 ) OR (id BETWEEN :s14 AND :e14 ) OR (id BETWEEN :s15 AND :e15 ) OR " +
            "(id BETWEEN :s16 AND :e16 ) OR (id BETWEEN :s17 AND :e17 ) OR (id BETWEEN :s18 AND :e18 ) OR (id BETWEEN :s19 AND :e19 ) OR (id BETWEEN :s20 AND :e20 ) OR " +
            "(id BETWEEN :s21 AND :e21 ) OR (id BETWEEN :s22 AND :e22 ) OR (id BETWEEN :s23 AND :e23 ) OR (id BETWEEN :s24 AND :e24 ) OR (id BETWEEN :s25 AND :e25 ) OR " +
            "(id BETWEEN :s26 AND :e26 ) OR (id BETWEEN :s27 AND :e27 ) OR (id BETWEEN :s28 AND :e28 ) OR (id BETWEEN :s29 AND :e29 ) OR (id BETWEEN :s30 AND :e30 ) OR " +
            "(id BETWEEN :s31 AND :e31 ) OR (id BETWEEN :s32 AND :e32 ) OR (id BETWEEN :s33 AND :e33 ) OR (id BETWEEN :s34 AND :e34 ) OR (id BETWEEN :s35 AND :e35 ) OR " +
            "(id BETWEEN :s36 AND :e36 ) OR (id BETWEEN :s37 AND :e37 ) OR (id BETWEEN :s38 AND :e38 ) OR (id BETWEEN :s39 AND :e39 ) OR (id BETWEEN :s40 AND :e40 )"+ 
"(id BETWEEN :s41 AND :e41 ) OR (id BETWEEN :s42 AND :e42 ) OR (id BETWEEN :s43 AND :e43 ) OR (id BETWEEN :s44 AND :e44 ) OR (id BETWEEN :s45 AND :e45 ) OR " +
 "(id BETWEEN :s46 AND :e46 ) OR (id BETWEEN :s47 AND :e47 ) OR (id BETWEEN :s48 AND :e48 ) OR (id BETWEEN :s49 AND :e49 ) OR (id BETWEEN :s50 AND :e50 )");
    List<Category> getCategorySpecificRows(int s1, int e1, int s2, int e2, int s3, int e3, int s4, int e4, int s5, int e5,
                                                         int s6, int e6, int s7, int e7, int s8, int e8, int s9, int e9, int s10, int e10,
                                                         int s11, int e11, int s12, int e12, int s13, int e13, int s14, int e14, int s15, int e15,
                                                         int s16, int e16, int s17, int e17, int s18, int e18, int s19, int e19, int s20, int e20,
                                                         int s21, int e21, int s22, int e22, int s23, int e23, int s24, int e24, int s25, int e25,
                                                         int s26, int e26, int s27, int e27, int s28, int e28, int s29, int e29, int s30, int e30,
                                                         int s31, int e31, int s32, int e32, int s33, int e33, int s34, int e34, int s35, int e35,
                                                         int s36, int e36, int s37, int e37, int s38, int e38, int s39, int e39, int s40, int e40,
    int s41, int e41, int s42, int e42, int s43, int e43, int s43, int e44, int s45, int e45, int s46, int e46, int s47, int e47, int s48, int e48, int s49, int e49, int s50, int e50);
@Query(“从类别_表中选择*,其中(id介于:s1和:e1之间)或(id介于:s2和:e2之间)或(id介于:s3和:e3之间)或(id介于:s4和:e4之间)或(id介于:s5和:e5之间)”+
“或(id介于:s6和:e6之间)或(id介于:s7和:e7之间)或(id介于:s8和:e8之间)或(id介于:s9和:e9之间)或(id介于:s10和:e10之间)或”+
“(id介于:s11和:e11之间)或(id介于:s12和:e12之间)或(id介于:s13和:e13之间)或(id介于:s14和:e14之间)或(id介于:s15和:e15之间)或”+
“(id介于:s16和:e16之间)或(id介于:s17和:e17之间)或(id介于:s18和:e18之间)或(id介于:s19和:e19之间)或(id介于:s20和:e20之间)或”+
“(id介于:s21和:e21之间)或(id介于:s22和:e22之间)或(id介于:s23和:e23之间)或(id介于:s24和:e24之间)或(id介于:s25和:e25之间)或”+
“(id介于:s26和:e26之间)或(id介于:s27和:e27之间)或(id介于:s28和:e28之间)或(id介于:s29和:e29之间)或(id介于:s30和:e30之间)或”+
“(id介于:s31和:e31之间)或(id介于:s32和:e32之间)或(id介于:s33和:e33之间)或(id介于:s34和:e34之间)或(id介于:s35和:e35之间)或”+
“(id介于:s36和:e36之间)或(id介于:s37和:e37之间)或(id介于:s38和:e38之间)或(id介于:s39和:e39之间)或(id介于:s40和:e40之间)”+
“(id介于:s41和:e41之间)或(id介于:s42和:e42之间)或(id介于:s43和:e43之间)或(id介于:s44和:e44之间)或(id介于:s45和:e45之间)或”+
“(id介于:s46和:e46之间)或(id介于:s47和:e47之间)或(id介于:s48和:e48之间)或(id介于:s49和:e49之间)或(id介于:s50和:e50之间)”;
列出GetCategorySpecicrows(int s1、int e1、int s2、int e2、int s3、int e3、int s4、int e4、int s5、int e5、,
国际标准s6、国际标准e6、国际标准s7、国际标准e7、国际标准s8、国际标准e8、国际标准s9、国际标准e9、国际标准s10、国际标准e10、,
国际标准s11、国际标准e11、国际标准s12、国际标准e12、国际标准s13、国际标准e13、国际标准s14、国际标准e14、国际标准s15、国际标准e15、,
int s16,int e16,int s17,int e17,int s18,int e18,int s19,int e19,int s20,int e20,
int s21,int e21,int s22,int e22,int s23,int e23,int s24,int e24,int s25,int e25,
int s26,int e26,int s27,int e27,int s28,int e28,int s29,int e29,int s30,int e30,
int s31,int e31,int s32,int e32,int s33,int e33,int s34,int e34,int s35,int e35,
int s36,int e36,int s37,int e37,int s38,int e38,int s39,int e39,int s40,int e40,
int s41、int e41、int s42、int e42、int s43、int e43、int s43、int e44、int s45、int e45、int s46、int e46、int s47、int e47、int s48、int e48、int e48、int s49、int e49、int s50、int e50);
并使用它在50次之间迭代100K记录表。它工作正常,但性能较差。将这些数据发送回存储库大约需要500毫秒到1500毫秒。为了提高数据获取的时间效率,编写此查询的更好方法应该是什么

第一个2K记录的行从300到500,第二个2K记录的行从2300到2500,第三个2K记录的行从4300到4500,同样地,直到表的末尾

你可以使用艺术技巧!模块在这里很方便:

select *
from category
where id % 2000 between 300 and 500

这会缩短查询的编写时间,但效率可能仍然是一个问题。每2000行选择300行可能需要进行全面扫描。

海量数据处理的答案是需要在本地处理这些数据。。不需要上网。。。因为这些数据将始终保持静态。其次,由于数据的性质,任何表的数据都不是冗余/重复的。此外,不能根据总记录减少表数据:(…因为间隔和范围可以根据触发查询之前执行的计算而增加或减少。我不知道为什么,但当我使用房间数据库运行建议的查询时,它返回空列表。@query(“从类别中选择*,其中(id%:间隔))介于:s1和:e1“)之间的列表GetCategorySpecicrows(int s1,int e1,int interval);但是,如果我按照我在问题中所写的那样运行查询,它会获取数据,正如您所说的效率,建议的查询返回时花费了更多的时间,即使它是空的……此外,当我在上在线测试此建议的查询时,它完全符合我们案例中的要求