Java JDBC将警告视为数据截断错误
我有一个带有三个字段的MySQL表:Java JDBC将警告视为数据截断错误,java,mysql,exception,jdbc,truncated,Java,Mysql,Exception,Jdbc,Truncated,我有一个带有三个字段的MySQL表: fname varchar(20) ftype varchar(10) value varchar(30) 正如您所看到的,“value”是一个varchar,但我使用它来存储不同类型的值(由用户输入),因此我可以: UPDATE table SET value = 1 + value WHERE ftype='COUNTER'; 它按预期工作,执行隐式转换,然后更新和存储,因此: fname ftype value f
fname varchar(20)
ftype varchar(10)
value varchar(30)
正如您所看到的,“value”是一个varchar,但我使用它来存储不同类型的值(由用户输入),因此我可以:
UPDATE table SET value = 1 + value WHERE ftype='COUNTER';
它按预期工作,执行隐式转换,然后更新和存储,因此:
fname ftype value
f1 COUNTER 100
f2 COUNTER 100 dǵ#$vferv <-- this value contains an input error
我完全同意。
关键是,如果我直接执行查询,它会工作(如果我运行show warnings
,MySQL最终会返回一些警告),但如果我在Java EE应用程序中运行(在glassfish下运行),这些警告会被视为错误,因此我会得到一个异常(即:com.mysql.jdbc.MysqlDataTruncation:Data truncation:Truncated不正确的双精度值:“100 dǵ#$vferv”
)
JDBC驱动程序中是否有任何选项可以告诉它在这种情况下不抛出异常?您的问题的答案如下:
基本上,添加“jdbcomplianttruncation=false”作为URL配置参数是否尝试重写查询以正确处理数据类型转换?
更新表SET value=CAST(1+CAST(值为CHAR(30))作为CHAR(30))其中ftype='COUNTER';
警告是在sum运算符将varchar隐式转换为unsigned的过程中生成的,我看不出在隐式转换之前将varchar强制转换为char如何解决问题。
fname ftype value
f1 COUNTER 101
f2 COUNTER 101