Jfinal啥时候完美支持Oracle,sqlserver等库数据类型

发布网友 发布时间:2022-04-25 13:14

我来回答

1个回答

热心网友 时间:2024-12-03 19:26

这是一个讨论过多次的问题,jfinal 从 jdbc 中获取到数据以后,没有经过任何类型转换(Blob、Clob除外),保存在 Model、Record 中的属性具体是什么类型完全由 jdbc 决定。

进一步来看类型问题,在 JDBC 规范中,Java 数据类型与数据库字段类型存在对应关系,例如Java 的 Integer 对应
mysql 字段的 integer,Java的Date对应mysql字段的
datatime。但这个对应关系不仅与字面上的意思有关,还与以下两个因素有关:

1:sql 中使用了 count(...) 或 sum(...)这样的函数,例如 select sum(money) from
account这样的 sql,虽然 money 在数据库中的字段类型是 integer,但得出来的结果在 jdbc中会被自动转化成 Long
型,因为要考虑 integer 在相加以后再放入 Integer 类型的变量时会出现数值溢出。

2:改变数据库字段的长度,也能引发jdbc 将低长度的类型自动转成高长度的类型。例如 mysql 的 tinyint
字段类型,在长度为1时,jdbc 会自动将tinyint(1)给转成java的 Boolean,长度大于 1 时将转成java的 Integer

以上转换是 jdbc 的合理行为,是为了防止数值溢出,jfinal 不方便干预,所以需要开发者对于数据类型心中有数,合理使用Model、Record的不同 getter 方法来获取数据。

热心网友 时间:2024-12-03 19:23

这是一个讨论过多次的问题,jfinal 从 jdbc 中获取到数据以后,没有经过任何类型转换(Blob、Clob除外),保存在 Model、Record 中的属性具体是什么类型完全由 jdbc 决定。

进一步来看类型问题,在 JDBC 规范中,Java 数据类型与数据库字段类型存在对应关系,例如Java 的 Integer 对应
mysql 字段的 integer,Java的Date对应mysql字段的
datatime。但这个对应关系不仅与字面上的意思有关,还与以下两个因素有关:

1:sql 中使用了 count(...) 或 sum(...)这样的函数,例如 select sum(money) from
account这样的 sql,虽然 money 在数据库中的字段类型是 integer,但得出来的结果在 jdbc中会被自动转化成 Long
型,因为要考虑 integer 在相加以后再放入 Integer 类型的变量时会出现数值溢出。

2:改变数据库字段的长度,也能引发jdbc 将低长度的类型自动转成高长度的类型。例如 mysql 的 tinyint
字段类型,在长度为1时,jdbc 会自动将tinyint(1)给转成java的 Boolean,长度大于 1 时将转成java的 Integer

以上转换是 jdbc 的合理行为,是为了防止数值溢出,jfinal 不方便干预,所以需要开发者对于数据类型心中有数,合理使用Model、Record的不同 getter 方法来获取数据。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com