mysql与JFinal的数据关系

Posted by 老沙
7月 12 2017

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’
1
1
那么m=11是正确的,因为考虑到“-”(负数),长度最大为11位。

而如果你的数据字段是这样子的话

`uid` int(11) unsigned NOT NULL COMMENT ‘用户id’
1
1
那么m=11是没有意义的,因为最大长度为10位,如果你比较专业的话,此时,你的数据字段就应该是这样子的

`uid` int(10) unsigned NOT NULL COMMENT ‘用户id’
1
1
五、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);
}
1
2
3
4
5
6
7
8
9
10
11
12
13

1
2
3
4
5
6
7
8
9
10
11
12
13
方法很详细的介绍了应该匹配哪一种mysql数据类型。

Trackback URL for this entry