关于Db.find()与Db.query()以及Record异常

因偶然的一个手误导致异常:cannot be cast to com.jfinal.plugin.activerecord.Record

return Db.use("db2").query(SQL, idx);

执行上局代码时发现正常、异常、正常、异常的不稳定现象,而发生的异常就是上述无法转换类型。

后发现Db.query()返回的时List<T>,而在利用数据的时候默认是以Record来处理的,于是将代码改为如下,问题迎刃而解:

return Db.use("db2").find(SQL, idx);,因为Db.find()返回的是List<Record>。


按理说上面的内容没什么好说的,使用对应结果类型就是了,奇怪的是当使用Db.query()时,读的是同一张数据表,仅仅当检索条件发生变化时才会报出异常,日常使用都没问题;且经过排查,检索的数据并无异常,也不含有NULL的字段,这个现象就很奇怪了。

检查问题时检索过一些来自搜索引擎的信息,有提到时JDK的问题,还引出了JFinal3.5时类似的问题,但据称从3.6就已经解决了,如今采用的是最新的4.8版本。

不知是否还有人遇到此问题,解决自然很简单,但就是不清楚到底是什么原因引起的有正常又有异常的现象。

评论区

JFinal

2020-03-04 13:51

Db 中的 API 主要有两大类, 一类是 find 系列, 一类是 query 系列

find 系返回的数据会被封装成 Record 对象,query 系返回的数据是原样返回,不做封装

Db.query 一般直接使用 queryLong、queryInt、queryStr 这类方法,可以得到确切的类型

热门反馈

扫码入社