Sqlite获取x行,然后是x行

时间:2014-10-19 15:08:09

标签: android sql

开发使用SQLite数据库的Android应用程序。

我有 ListView ,它使用数据库中的数据来显示列表(见图片)。

图片在Base64字符串中解码并存储在数据库中。我的问题是这个日志:

10-19 16:51:36.612: W/CursorWindow(15151): Window is full: 
requested allocation 136877 bytes, free space 78836 bytes, window size 2097152 bytes

它会播放很多帧,因为读取时间会增加。 这是因为我总是读x + 10行。 1,它读取10行,然后是20行,然后是30行,继续......

解决方案,我想要使用的是,获取0-10,11-20,21-30等行。怎么做到这一点?我只需要Sql查询。

编辑:我的查询

String columns[] = {KEY_ID, KEY_NAME, KEY_RATING, KEY_CUISINE, KEY_IMAGE};
Cursor cursor = db.query(TABLE_RECIPES, columns, null, null, null, null, KEY_NAME, lim);

ListView

2 个答案:

答案 0 :(得分:8)

使用rawQuery方法,并指定limit关键字。

e.g:

"SELECT * FROM myTable limit 10" <-- get the 1st 10 rows
"SELECT * FROM myTable limit 10, 20" <-- get the 2nd 10 rows between 10 and 20, etc

这应该让你开始。

答案 1 :(得分:1)

我尝试了上面的答案,结果是:

"SELECT * FROM myTable limit 10" <-- Got the first 10 rows
"SELECT * FROM myTable limit 10, 20" <-- Got the first 20 rows !

所以上面的答案对我不起作用,对我有用的是:

这是我的表:

table

获取前10

select * from quran_text where sura = 2 limit 0, 10

first10

第二名10:

select * from quran_text where sura = 2 limit 10, 10

second10

第三名10:

select * from quran_text where sura = 2 limit 20, 10

third10

在图片中它只显示了5个空间的记录,但它得到了正确的结果。

所以要把它作为模式:

在这里获得前10名X = 1;

在java中创建查询:

String query = "select * from quran_text where sura = 2 limit "+((X-1)*10)+", 10";