使用ROOM数据库,
升级数据库结构,同时请求表记录时,报这个错误
Failed to read row 0, column 29 from a window with 1 rows, 29 columns
exception: Row too big to fit into CursorWindow requiredPos=0, totalRows=1; query: SELECT * FROM TBPLOTRECORD
FATAL EXCEPTION: OkHttp Dispatcher
Process: cn.forestar.lincebao, PID: 15002
android.database.sqlite.SQLiteBlobTooBigException: Row too big to fit into CursorWindow requiredPos=0, totalRows=1
at android.database.sqlite.SQLiteConnection.nativeExecuteForCursorWindow(Native Method)
at android.database.sqlite.SQLiteConnection.executeForCursorWindow(SQLiteConnection.java:1047)
at android.database.sqlite.SQLiteSession.executeForCursorWindow(SQLiteSession
我使用的是查询全部的方式,现在报上面的错误,SQL语句是查询全部字段(*)
解决方式,我修改了下查询语句就可以,把需要的字段查询出来。
android
.
database
.
sqlite
.
SQLite
Blob
TooBig
Exception
:
Row
too
big
to
fit
into
Cursor
Window
required
Pos
=2,
total
Rows
=3
解决办法:
Cursor
cursor
= db.query(TABLE, null, "id=?", new String[]{id}, null, null, null);
设置一下
Cursor
Window
的大小即可
Cursor
Window
cw = new Cu
读取
数据库
首先要得到
数据库
的位置,在编译的时候
数据库
的位置位于assets目录中的。但在安装调试APP时,
数据库
就会被放到data/data/com.example.administrator目录中,
数据库
的名称为assets目录中的名称。如test.db。
首先读取
数据库
的数据就先得到
数据库
:
public class SQLDB {
//
数据库
存储路径
String f
1.执行的时机不一样:where是分组之前进行限定,不满足where条件,则不参与分组,而having是分组之后对结果进行过滤
2.可判断的条件不一样:where不能对聚合函数进行判断,having可以。
3.执行顺序:where>聚合函数>having
博主介绍:
✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W+粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台的优质作者。通过长期分享和实战指导,我致力于帮助更多学生完成毕业项目和技术提升。
技术范围:
我熟悉的技术领域涵盖SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等方
这个错误是由于查询结果集太大,超过了 `
Cursor
Window
` 的限制所导致的。`
Cursor
Window
` 是
Android
中用于缓存查询结果的内存结构,它的大小是受限的,一般为 2MB 左右。
针对这个问题,可以通过以下几种方式来解决:
1. 增加每次查询的限制
可以通过在查询时增加查询的限制,每次只查询少量的数据,避免查询结果集太大。例如:
```java
QueryBuilder<Data> builder = daoSession.getDataDao().queryBuilder();
builder.limit(100); // 每次查询100条数据
List<Data> dataList = builder.list();
2. 分页查询数据
可以通过分页查询数据的方式来避免查询结果集太大。例如:
```java
QueryBuilder<Data> builder = daoSession.getDataDao().queryBuilder();
builder.limit(pageSize); // 每页查询的数量
builder.offset(pageSize * pageIndex); // 查询的偏移量,即从第几条数据开始查询
List<Data> dataList = builder.list();
3. 使用 Projection 查询部分字段
如果查询结果中的一些字段不是必要的,可以使用 Projection 查询部分字段,减少查询结果集的大小。例如:
```java
QueryBuilder<Data> builder = daoSession.getDataDao().queryBuilder();
builder.projectColumns(DataDao.Properties.Id, DataDao.Properties.Name); // 只查询id和name字段
List<Data> dataList = builder.list();
4. 压缩数据
如果查询结果集中包含大量的文本或二进制数据,可以考虑使用压缩算法对数据进行压缩,减小查询结果集的大小。例如:
```java
QueryBuilder<Data> builder = daoSession.getDataDao().queryBuilder();
builder.where(DataDao.Properties.Id.eq(id));
Data data = builder.unique();
byte[] compressedData = compress(data.getContent()); // 压缩数据
以上是一些可能的解决方案,具体应该根据具体情况进行选择。