汇总一些sql中字段类型为 tinyint 的报错。
- java.lang.Byte cannot be cast to java.lang.Integer
1. 需要在读取的时候将 tinyint 的变量 CAST( 变量 AS INT) 来进行处理。
这是别的人的一个解决方法。
我在实际操作的时候,还是报错了。具体原因现在我还无法给出。
据我分析,从数据库读出来的 tinyint 被自动转为了 decimal 类型。而decimal因为精度,或者长度等因素,无法转换为int。
这里可以用 CAST( tinyint变量 AS DECIMAL)。
2. SELECT (变量 + 0 ) FROM 表名。
我在看java基础书,讲到类型转换的时候想到的。同理,转数字类型使用 (变量*1) 也可以。
转字符串 :使用 (变量 + ‘’) 。
今天写博客重新搜解答的时候,看到了类似的答案,当时没有往类型转换的方面想,所以大脑自动忽略了。今天看到真是后悔。
- cannot cast to 其他类型报错。
读取的长度太小,增加length的值:@Column(length = 值)
这个bug我遇到过,当时也是这么解决的。
- 设置为tinyint(1),返回值为false/true。
此处可以修改为tinyint(4),长度为4。
或者将JDBC的URL增加 tinyInt1isBit=false参数,注意参数名区分大小写,否则不生效。这个方法我没尝试,有没有效果目前不知道。
jdbc:mysql://host:port/db?tinyInt1isBit=false