android.database.sqlite.SQLiteBlobTooBigException: Row too big to fit into CursorWindow

android.database.sqlite.SQLiteBlobTooBigException: Row too big to fit into CursorWindow requiredPos=2, totalRows=3

解决办法:

Cursor cursor = db.query(TABLE, null, "id=?", new String[]{id}, null, null, null);
设置一下CursorWindow的大小即可
CursorWindow cw = new CursorWindow("test", 5000000);
AbstractWindowedCursor ac = (AbstractWindowedCursor) cursor;
ac.setWindow(cw);

有疑问的可以下方留言,相互学习,我是心哥说编程,致力于成为一个编程大牛编程爱好者。 

SQLiteBlobTooBigException是一个Android SQLite库中常见的错误,它发生在试图将大数据量的对象(比如BLOB类型的数据)存储到SQLite数据库表中时,由于数据超过了CursorWindow(用于一次查询结果缓存的小型内存块)的最大容量。CursorWindow通常限制在几百行或几千字节。 解决这个问题的方法有: 1. **增大CursorWindow大小**:通过修改代码,在SQLiteOpenHelper中设置更大的页面大小,允许CursorWindow缓存更多的数据。但是请注意,这会增加内存消耗,需要谨慎调整。 ```java @Override public void onCreate(SQLiteDatabase db) { db.execSQL("PRAGMA page_size = " + (int)(1024 * 1024)); // 设置1MB的page_size } ``` 2. **分批处理大对象**:如果数据过大无法一次性加载,可以考虑将其分割成较小的部分并分别插入,然后在应用程序内部合并结果。 3. **优化数据存储结构**:考虑是否可以更改数据库设计,例如使用单独的表来存储大文件的元数据和索引,而不是直接包含完整的二进制内容。 4. **使用文件存储**:对于真正的大文件,可以选择将其保存到外部文件系统(如Android的FilesProvider),然后在需要的时候读取。 5. **检查数据量**:确保你在插入数据之前检查了其实际大小,并避免一次性插入超过限制的数据。 记得每次修改后都要测试应用性能,防止因为处理大量数据而影响用户体验。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值