项目原来使用的是mysql数据库,没有任何问题,客户提出想使用Sqlite数据库,按照步骤,把Sqlite3Dialect方言加入,并加入sqlite.jdbc依赖库,程序能正常运行,但是原来在mysql中用tinyint(1)定义的布尔变量现在没法取数据了,报异常。
代码如下:
boolean flag=re.getBoolean("is_show"); //在mysql下正确,在sqlite下报错
jfinal调用代码如下
/**
* Get attribute of mysql type: bit, tinyint(1)
*/
public Boolean getBoolean(String attr) {
return (Boolean)attrs.get(attr);
}
报错如下:
java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Boolean at com.jfinal.plugin.activerecord.Model.getBoolean(Model.java:277)
请问有啥办法解决?谢谢!
项目:JFinal
如果没有解决,就在升级到 jfinal 3.3 的基础之上,通过 Sqlite3Dialect.setModelBuilder(...) 以及 setRecordBuilder(...) ,将 ModelBuilder、RecordBuilder 替换成自己的实现
自己的实现类似于下面的方式:
public class MyModelBuilder extends ModelBuilder {
...
}
在 if 分支里头添加一个分支,判断一下:
if (types[i] == Types.BOOLEAN) {
value = rs.getBoolean(i);
}