开发使用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);
答案 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 !
所以上面的答案对我不起作用,对我有用的是:
这是我的表:
获取前10 :
select * from quran_text where sura = 2 limit 0, 10
第二名10:
select * from quran_text where sura = 2 limit 10, 10
第三名10:
select * from quran_text where sura = 2 limit 20, 10
在图片中它只显示了5个空间的记录,但它得到了正确的结果。
所以要把它作为模式:
在这里获得前10名X = 1;
在java中创建查询:
String query = "select * from quran_text where sura = 2 limit "+((X-1)*10)+", 10";