前言:今天在做jfinal和mysql的数据转换时出现了java.lang.Boolean cannot be cast to java.lang.Integer错误,而之前我就遇到过这样的问题mysql与JFinal的数据关系,这使我意识到有必要整理一下jfinal与mysql数据类型关系。
mysql jfinal 例子 编号
varchar, char, enum, set, text, tinytext, mediumtext, longtext String getStr(“xxx”) 0001
int, integer, tinyint(n) n > 1, smallint, mediumint int getInt(“xxx”) 0002
bigint, unsign int long getLong(“xxx”) 0003
unsigned bigint BigInteger getBigInteger(“xxx”) 0004
date, year Date getDate(“xxx”) 0005
time Time getTime(“xxx”) 0006
timestamp, datetime Timestamp getTimestamp(“xxx”) 0006
real, double Double getDouble(“xxx”) 0007
float Float getFloat(“xxx”) 0008
bit, tinyint(1) Boolean getBoolean(“xxx”) 0009
decimal, numeric BigDecimal getBigDecimal(“xxx”) 0010
binary, varbinary, tinyblob, blob, mediumblob, longblob byte[] getBytes(“xxx”) 0011
extends from Number Number getNumber(“xxx”) 0012
然后,针对以上内容,我想说明以下几点:
0002和0009
注意0002中的tinyint(n) n > 1,在mysql中,一般为了表示状态,我们可能都会选择tinyint,比如status,我们用0表示未审核,1表示审核,2表示拒绝,这个时候我们依然会将n设置为1,但是到了jfinal进行转换的时候,如果你还是用getInt()方法,那么就会抛出java.lang.ClassCastException: java.lang.Boolean cannot be cast to java.lang.Integer。
所以,如果是这种情况,请设置n>1。
当然这也为我们提供了方便,如果你用tinyint(1)表示is_delete,0表示未删除,1表示已删除。那么jfinal的getBoolean还是够方便。
0003和0004
这里请注意到unsigned ,在数据库中,我们很少用-1、-2、-3、… 、-100000等来表示数据,那么我们的mysql中就可能把数据类型设置为“无符号(unsigned)”,,那么此时请一定要注意“unsigned int”就不能再使用getInt()来完成转换了,“unsigned bigint”就不能使用getLong()转换,而要替换成对应的getLong()和getBigInteger()。
旅行,有一种苍凉,“浮云游子意,落日故人情”,