MySQLSyntaxErrorException间歇性无效:“字段列表”中的未知列“xxx.yyy”-Tomcat
有几百个问题包含未知列错误,但在看了几十个之后,没有一个问题与我的问题相同。它们实际上似乎都是select语句中的错误,但在我的例子中,select语句a有时从servelt工作,b始终从PHP工作,c始终从Squirrel SQL客户端工作 我有一个遗留系统,无法控制查询。多年来,这些查询在PHP mysql中运行良好。此错误是间歇性的 例如,昨晚所有的报告都正常工作。今天早上,我再次尝试了该服务,其中一些查询由于来自Tomcat服务器Linux Centos、Java 1.6、Tomcat 6的MySQLSyntaxErrorException而失败。我将war文件的副本复制到Tomcat的webapp目录中,以使Tomcat重新加载servlet,查询再次正常工作。另一台主机上的MySQL服务器在Centos 5上是5.0.17 更多细节:昨天它似乎发生在Tomcat闲置了一段时间的时候——当我在几个小时后回到应用程序时,非常复杂的查询遇到了这个错误一段时间。这个应用程序有很多不太复杂的查询可以工作——我运行了几次,然后突然复杂的查询开始工作了。这件事昨天发生了三四次。但作为一个反例,这个复杂的查询在今天早上第一次起作用。Tomcat5.5中也出现了这种情况 mysql服务器日志中没有消息;虽然我增加了最大数据包长度,但目前无法打开警告 此外,这个查询在mysql-connector-java-5.1.22-bin.jar中一直失败,但当我降级到mysql-connector-java-5.1.15-bin.jar时,正确的工作间歇性地开始了。将查询复制到windows上的Squirrel SQL客户机会使其正常工作 servlet使用ApachePOI使用此查询的结果生成电子表格 这种软件组合是否存在已知问题 新信息** 这与查询的长度无关。下面是一个简短的示例,其中包含语句、堆栈跟踪和表定义,并更改了名称以保护无辜者;请注意,servlet有时会成功,当粘贴到squirrelsql中时,查询工作正常。客户端或服务器端都没有其他消息或警告。还有一些类似的查询在100%的时间内都能正常工作 质疑 堆栈跟踪MySQLSyntaxErrorException间歇性无效:“字段列表”中的未知列“xxx.yyy”-Tomcat,mysql,tomcat,jdbc,Mysql,Tomcat,Jdbc,有几百个问题包含未知列错误,但在看了几十个之后,没有一个问题与我的问题相同。它们实际上似乎都是select语句中的错误,但在我的例子中,select语句a有时从servelt工作,b始终从PHP工作,c始终从Squirrel SQL客户端工作 我有一个遗留系统,无法控制查询。多年来,这些查询在PHP mysql中运行良好。此错误是间歇性的 例如,昨晚所有的报告都正常工作。今天早上,我再次尝试了该服务,其中一些查询由于来自Tomcat服务器Linux Centos、Java 1.6、Tomcat
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'aa_bbb_cccc.c21' in 'field list'
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:532)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
at com.mysql.jdbc.Util.getInstance(Util.java:386)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1053)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4096)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4028)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2490)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2651)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2728)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2678)
at com.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java:1612)
...
表定义
CREATE TABLE `aa_bbb_cccc` (
`id` int(11) NOT NULL auto_increment,
`user_id` int(11) NOT NULL,
`user` varchar(255) NOT NULL,
`state` varchar(255) NOT NULL,
`time_stamp` timestamp NOT NULL default CURRENT_TIMESTAMP,
`c20` varchar(255) default NULL,
`c12` varchar(255) default NULL,
`c13` varchar(255) default NULL,
`c15` varchar(255) default NULL,
`c14` varchar(255) default NULL,
`c16` varchar(255) default NULL,
`c13b` varchar(255) default NULL,
`xx_yy` int(11) default NULL,
`c13c` text,
`key2` int(11) NOT NULL default '0',
`c21` varchar(255) default NULL,
`c22` varchar(255) default NULL,
`c23` varchar(255) default NULL,
PRIMARY KEY (`id`,`key2`),
KEY `user_id` (`user_id`),
KEY `user` (`user`),
KEY `state` (`state`),
KEY `time_stamp` (`time_stamp`),
KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
我敢打赌你一定是丢了包。查看您的服务器日志或网络设备,看看数据包是否被丢弃或有问题。您可以发送您正在使用的查询吗?他说他不允许显示查询。您有权访问MySQL服务器日志吗?您可能希望打开常规查询日志并打开所有警告选项。事实证明,它与JDBC无关,尽管它还没有解决。来自tomcat服务器的mysql命令行客户端也会出现同样的问题。查询在本地和其他主机上的JDBC客户机上运行良好。知道如果超过max_allowed_数据包,JDBC驱动程序会引发什么异常吗?如果只是在某些情况下查询失败,则可能是在这些情况下较长的参数导致超出此大小。手册说明此错误将导致连接关闭。这并没有发生-我们得到的只是无效列消息的语法异常。
CREATE TABLE `aa_bbb_cccc` (
`id` int(11) NOT NULL auto_increment,
`user_id` int(11) NOT NULL,
`user` varchar(255) NOT NULL,
`state` varchar(255) NOT NULL,
`time_stamp` timestamp NOT NULL default CURRENT_TIMESTAMP,
`c20` varchar(255) default NULL,
`c12` varchar(255) default NULL,
`c13` varchar(255) default NULL,
`c15` varchar(255) default NULL,
`c14` varchar(255) default NULL,
`c16` varchar(255) default NULL,
`c13b` varchar(255) default NULL,
`xx_yy` int(11) default NULL,
`c13c` text,
`key2` int(11) NOT NULL default '0',
`c21` varchar(255) default NULL,
`c22` varchar(255) default NULL,
`c23` varchar(255) default NULL,
PRIMARY KEY (`id`,`key2`),
KEY `user_id` (`user_id`),
KEY `user` (`user`),
KEY `state` (`state`),
KEY `time_stamp` (`time_stamp`),
KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;