一、问题描述
问题:在使用Java的jdbc读取tinyint(1)类型的数据时,rs.getObject(i)的值为Boolean类型的true/false。而数据库中存储的是1或0,那为啥用JDBC读取到的就是true或false了呢?
所以,JAVA数据类型 和 MYSQL的数据类型转换,要注意tinyInt 类型,且存储长度为1的情况。
二、原因分析
MYSQL官方的JDBC文档定义转换规则如下:
官方文档地址:https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-reference-type-conversions.html
MySQL Types to Java Types for ResultSet.getObject():
java.lang.Boolean if the configuration property tinyInt1isBit is set to true(the default) and the storage size is 1, or java.lang.Integer if not.
翻译:
如果tinyInt1isBit =true(默认),且tinyInt存储长度为1 ,则转为java.lang.Boolean;否则转为java.lang.Integer。
注: 是ResultSet.getObject() 方法
三、解决方法
1、tinyInt(1) 只用来代表Boolean含义的字段,且0代表False,1代表True。如果要存储多个数值,则定义为tinyInt(N), N>1。例如 tinyInt(2)。
2、JDBC的URL增加 tinyInt1isBit=false参数,注意参数名区分大小写,否则不生效:
jdbc:mysql://localhost:3306/test?tinyInt1isBit=false
相关文章:
【1】 https://blog.youkuaiyun.com/dujianxiong/article/details/60571395
【2】 https://blog.youkuaiyun.com/codolio/article/details/6591493