java.sql.PreparedStatement.setString使变量与双精度混淆的函数

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)

  • @FaddishWorm:实际有问题的代码被隐藏在评论中的事实可能没有帮助.将来,请在问题中包含您的SQL(或任何相关的代码).见http://tinyurl.com/so-hints (2认同)