Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.sql.PreparedStatement.setString函数将varchar与double混淆_Java_Mysql_Tomcat_Jdbc - Fatal编程技术网

java.sql.PreparedStatement.setString函数将varchar与double混淆

java.sql.PreparedStatement.setString函数将varchar与double混淆,java,mysql,tomcat,jdbc,Java,Mysql,Tomcat,Jdbc,我有一个用java编写的servlet/tomcat服务器 我编写了一个mysql类,我一直在使用其中的函数使用jdbc将准备好的语句插入mysql数据库 我调用的函数使用java.sql.PreparedStatement.setString来设置准备好的语句的参数。这已经连续几个月完美地为数千种不同的输入工作,没有任何问题 但是,最近,当尝试使用该函数将ip地址插入VARCHAR类型的mysql列时,引发了一个异常,如下所示: com.mysql.jdbc.MysqlDataTruncati

我有一个用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'
这很奇怪,我的代码中没有DOUBLE的概念,mysql表上的“Show Columns”确保数据类型实际上是VARCHAR。我让我的同事也仔细检查了一下,我没有遗漏一些简单的东西。然而,我们都被难住了

我唯一的理论是JDBC驱动程序或SetText函数正在冒昧地使用双数据类型,因为ip地址的第一部分是XX.XX的形式


任何帮助都是很好的,请不要告诉我做一些明显的事情,比如检查我的列数据类型等。我花了很多时间反复检查所有内容。

问题不在于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>
问题是,
INSERT-INTO的语法。。。。在重复密钥更新时,您使用的
不正确。您使用了关键字
,而不是
(逗号)。因此,查询应该是:

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)

您是否更新了任何内容(MySQL、驱动程序等)?不,我没有介绍任何新内容,只是在其中插入了不同类型的数据。您可以发布代码吗?您的代码中可能缺少引号。
PreparedStatement
ParameterMetaData
作为列类型报告了什么?什么是查询?如何设置参数?@sunleo您指的是查询中问号周围的引号吗?我不认为这是正确的。我的查询是:
INSERT-INTO-route_表(系统、IP、端口)中重复密钥更新IP=?端口=?
@FaddishWorm:注释中隐藏了实际有问题的代码这一事实可能没有帮助。以后,请在问题开始时包含您的SQL(或任何相关代码)。看见