JFinal 2.0 model 的类型转换有没有经常抛异常?
@jfinal 数据库字段 title 是varchar 类型, model.get("title") 会抛异常 java.lang.String cannot be cast to [Ljava.lang.Object
同时数据库字段 int 类型,我分不清 该用 model.getLong("column") 还是 model.getInt("column"),有时好,有时会抛异常。
以上这些,算是 jfianl 的bug吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
主键ID绝对会是 Long , 因为是 非 负数 ,超出了 int 。要用 getLong 获取 。
其实返回类型是确定的,只不过有些情况造成了干扰,例如无符号整型unsign integer 对应的类型其实是 long,而很多人认为 unsign integer 仍然是 integer,这类情况造成了不解。还有一种情况是人为提升字段长度,例如让 integer 类型长度为 20,而不是默认的 11,也会造成类型为 long
在 mysql 中 ,int 字段 勾选了 非负数 时 必须 要用 getLong 获取 ,因为它超出了 int 。当 不勾选 非负数 时 可以 除主键 其他自选 都可以用 getInt 获取 。
引用来自“JFinal”的评论
对于数据库操作得到的数据的数据类型,jfinal 并未做过任何干预,只是将 JDBC 的数据拿到后放在 attrs 里面而已。
有几个要注意的地方:
1:数据库字段类型对应什么java类型,这个在Model的get系列方法上有明确的注释放说,用鼠标光标停留在方法上即可看到这些说明。
2:常用类型对应: varchar对应String,integer 对应 Integer,datetime 对应 Date,bigint 对应Long
3:当sql中使用了 sum() count() 这类函数时,原先的 integer 会升为 long 型,原因是 jdbc 为了避免sum()、count() 得到的结果超出 integer所表达的范围并溢出,例如 Db.queryLong("select sum(money) from account") 这个查询,虽然 money 为 integer 字段,但sql 中使用 sum(money)以后会升为 long 型
除了第三点需要格外注意以外,类型的对应关系看 com.jfinal.plugin.activerecord.Mode.java 中的get 系列方法即可。
Java数据类型和MySql数据类型对照表 http://dev.mysql.com/doc/connector-j/en/connector-j-reference-type-conversions.html