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 |
二、tinyint
在mysql中,tinyint(n)中的n对jfinal的数据转换有影响:
- n>1时,jfinal要使用getInt。
- n=1时,jfinal要使用getBoolean。
三、unsigned
在mysql中unsigned表示有无符号,举例来说:
- unsigned int,表示数据>0,不包含负数,那么jfinal就要使用getLong。
- unsigned bigint,表示数据>0,不包含负数,那么jfinal就要使用getBigInteger。
四、int(m)
关于mysql中int(m)中的m,这当然包含bigint(m)的m。
int[(m)]
有符号值:-2147683648 到2147683647(- 231 到231- 1)
无符号值:0到4294967295(0 到232 - 1) 4个字节
这意味着,如果你的数据字段是这样子的话
`uid` int(11) NOT NULL DEFAULT '0' COMMENT '用户id'
那么m=11是正确的,因为考虑到“-”(负数),长度最大为11位。
而如果你的数据字段是这样子的话
`uid` int(11) unsigned NOT NULL COMMENT '用户id'
那么m=11是没有意义的,因为最大长度为10位,如果你比较专业的话,此时,你的数据字段就应该是这样子的
`uid` int(10) unsigned NOT NULL COMMENT '用户id'
五、jfinal的api
只看如下代码:
/**
* Get attribute of mysql type: int, integer, tinyint(n) n > 1, smallint, mediumint
*/
public Integer getInt(String attr) {
return (Integer)attrs.get(attr);
}
/**
* Get attribute of mysql type: bigint, unsign int
*/
public Long getLong(String attr) {
return (Long)attrs.get(attr);
}
方法很详细的介绍了应该匹配哪一种mysql数据类型。
笑对现实的无奈,不能后退的时候,不再傍徨的时候,永远向前 路一直都在──陈奕迅《路一直都在》
本文出自:【沉默王二的博客】