刚接触Lua,睁眼瞎呀。背景:我接手的项目是接着别人做了90%的东西继续做,使用cocos2d-x引擎,从c++调用lua资源。调用类方法的时候出了这个错误attempt to call
前言:今天在做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()。