Fad*_*orm 3 java mysql tomcat jdbc
我有一个用java编写的servlet/tomcat服务器.
我有一个我编写的mysql类,我一直在使用它中的函数将预准备语句插入到使用jdbc的mysql数据库中.
我调用的函数java.sql.PreparedStatement.setString用于设置预准备语句的参数.对于数月的数千种不同的输入而言,这已经完美地工作了几个月而没有问题.
然而,最近,当尝试使用该函数将IP地址插入VARCHAR类型的mysql列时,我得到一个异常抛出,如下所示:
com.mysql.jdbc.MysqlDataTruncation: Data truncation: Truncated incorrect DOUBLE value: '10.1.1.101'
Run Code Online (Sandbox Code Playgroud)
这很奇怪,我的代码中没有任何DOUBLE的概念,mysql表上的"Show Columns"确保数据类型实际上是VARCHAR.我让我的同事们看看这个,以便仔细检查我是不是错过了一些简单的东西.但是我们都很难过.
我唯一的理论是JDBC驱动程序或SetText函数正在冒充并假设DOUBLE数据类型,因为ip地址的第一部分是XX.XX的形式
任何帮助都会很棒,请不要告诉我做明显的事情,比如检查我的列数据类型等等.我花了很多时间来检查所有内容.
Abh*_*Oza 10
问题不在于JDBC驱动程序.问题在于MySQL.这是我在MySQL commadline上得到的:
mysql> INSERT INTO route_table (SYSTEM, IP, PORT) VALUES ("192.168.1.24:8080","192.168.1.24","8080") ON DUPLICATE KEY UPDATE IP=values(IP) AND PORT=values(PORT);
Query OK, 1 row affected (0.04 sec)
mysql> INSERT INTO route_table (SYSTEM, IP, PORT) VALUES ("192.168.1.24:8080","192.168.1.24","8080") ON DUPLICATE KEY UPDATE IP=values(IP) AND PORT=values(PORT);
ERROR 1292 (22007): Truncated incorrect DOUBLE value: '192.168.1.24'
mysql>
Run Code Online (Sandbox Code Playgroud)
问题是,INSERT INTO .... ON DUPLICATE KEY UPDATE您使用的语法不正确.您使用了关键字AND而不是使用,(逗号).所以查询应该是:
mysql> INSERT INTO route_table (SYSTEM, IP, PORT) VALUES ("192.168.1.24:8080","192.168.1.24","8080") ON DUPLICATE KEY UPDATE IP=values(IP), PORT=values(PORT);
Query OK, 2 rows affected (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1137 次 |
| 最近记录: |