Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.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
MySQLSyntaxErrorException间歇性无效:“字段列表”中的未知列“xxx.yyy”-Tomcat_Mysql_Tomcat_Jdbc - Fatal编程技术网

MySQLSyntaxErrorException间歇性无效:“字段列表”中的未知列“xxx.yyy”-Tomcat

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

有几百个问题包含未知列错误,但在看了几十个之后,没有一个问题与我的问题相同。它们实际上似乎都是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%的时间内都能正常工作

质疑

堆栈跟踪

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;