Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.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 如何在Room@Query中使用ROW_NUMBER()?_Android_Android Sqlite_Android Room - Fatal编程技术网

Android 如何在Room@Query中使用ROW_NUMBER()?

Android 如何在Room@Query中使用ROW_NUMBER()?,android,android-sqlite,android-room,Android,Android Sqlite,Android Room,问题: 我在我的应用程序中遇到了一个api,发送的日期为pagespage size=20。因此,目前我正在尝试使用ROOM(一种基本的插入操作)在本地数据库中保存数据。当应用程序未连接到网络时,我希望应用程序以页面的形式从数据库中获取数据 解决方案我尝试过的: 使用 @Query("SELECT * FROM ( SELECT ROW_NUMBER () OVER ( ORDER BY rating ) RowNum,* FROM movie ) t WHERE t.RowNum >

问题:

我在我的应用程序中遇到了一个api,发送的日期为pagespage size=20。因此,目前我正在尝试使用ROOM(一种基本的插入操作)在本地数据库中保存数据。当应用程序未连接到网络时,我希望应用程序以页面的形式从数据库中获取数据

解决方案我尝试过的:

使用

 @Query("SELECT * FROM ( SELECT ROW_NUMBER () OVER ( ORDER BY rating ) RowNum,* FROM movie ) t WHERE t.RowNum > 0 AND t.RowNum <= 20")
 suspend fun getPagedMovie(): List<MovieEntity>
我得到两个编译错误:

,FROM,GROUP,LIMIT,ORDER,WHERE或逗号

&

无法重新加载t.RowNum

所以,为了解决这个问题,我尝试使用@RawQuery

val query = SimpleSQLiteQuery(
        "SELECT * FROM ( SELECT ROW_NUMBER () OVER ( ORDER BY rating ) RowNum,* FROM movie ) t WHERE t.RowNum > 0 AND t.RowNum <= 20"
    )
return movieDao.getPagedMovie(query).map { it.toGeneralMovie() }
&

在上述情况下,我在错误日志中得到以下信息:

2020-04-18 16:23:33.01421854-21854/?E/m.andor.watchi:运行时设置的未知位\u标志:0x8000 2020-04-18 16:23:34.158 21854-21891/com.andor.watchit E/[Gralloc ERROR]:不支持afbc的sanitize_格式:482格式[id:0x4]不应定义bpp 2020-04-18 16:23:34.41521854-21979/com.andor.watchit E/SQLiteLog:1 near:语法错误 2020-04-18 16:23:34.45621854-21978/com.andor.watchit E/AndroidRuntime:致命异常:DefaultDispatcher-worker-3 进程:com.andor.watchit,PID:21854
android.database.sqlite.SQLiteException:near:语法错误代码1 sqlite_错误[1]:,编译时:通过评级RowNum从选择行数中选择*,从电影t中选择*,其中t.RowNum>0和t.RowNum我通过使用限制和偏移找到了上述问题的解决方案

希望这对其他人也有帮助


感谢@dev masih在评论中提供了参考。

我通过使用限制和偏移找到了上述问题的解决方案

希望这对其他人也有帮助


感谢@dev masih也在评论中提供了参考。

你能使用像这里这样的跳转和取回机制吗:感谢上面的内容,我找到了限制和偏移的解决方案,并将其作为解决方案发布在这里@dev masih,但如果我能得到带有行号的解决方案,那将是非常好的。当前的解决方案是正确的,但我认为行数解决方案也让我感兴趣。我添加了一个行数解决方案。你可以使用像这里这样的跳取机制:感谢上面的内容,我确实找到了限制和偏移的解决方案,并将其用作gng发布在这里@dev masih,但如果我能获得行数解决方案,那将是非常棒的。当前的解决方案是正确的,但我认为我也对行编号的解决方案感兴趣。我添加了一个带有行编号的解决方案。。有关限制和偏移的详细信息。你可以看看很棒的。。有关限制和偏移的详细信息。你可以看看
 @RawQuery
 suspend fun getPagedMovie(query: SupportSQLiteQuery): List<MovieEntity>
@Query("SELECT * FROM movie ORDER BY rating DESC LIMIT :pageSize OFFSET (:pageNumber-1)*:pageSize")
suspend fun getPagedMovie(pageNumber: Int, pageSize: Int): List<MovieEntity>