有含有未知列錯誤幾百個問題,但看着幾十後,沒有一個是一樣的我的問題。它們在select語句中似乎都是錯誤的,但在我的情況下,select語句a)有時可以從servelt中工作,b)始終可以從PHP中工作,c)始終可以從Squirrel SQL客戶端運行。間歇無效MySQLSyntaxErrorException:未知列「xxx.yyy在‘字段列表’ - Tomcat的
我有一個遺留系統,不能控制查詢。多年來,這些查詢在PHP mysql中運行良好。這個錯誤是間歇性的。
例如,所有的報告都正常,昨晚工作。今天早上我再次嘗試了這個服務,並且一些查詢失敗了,從Tomcat服務器(Linux Centos,Java 1.6,Tomcat 6)的MySQLSyntaxErrorException。我將war文件的副本複製到Tomcat的webapp目錄中,以使Tomcat重新加載servlet,並且查詢再次正常工作。在不同的主機上,MySQL服務器在Centos 5上爲5.0.17。
更多詳情:昨天它似乎在Tomcat空閒了一段時間後出現 - 當我幾個小時後回到應用程序非常複雜的查詢一度遭受了此錯誤。該應用程序有很多不太複雜的查詢工作 - 我跑了幾次,然後突然複雜的查詢開始工作。昨天發生了三四次。但作爲一個反例,這個複雜的查詢今天早上第一次工作。它也發生在Tomcat 5.5中。
mysql服務器日誌中沒有消息;儘管我確實增加了最大數據包長度,但目前我無法打開警告。
此外,此查詢與mysql-connector-java-5.1.22-bin.jar一致失敗,但當我降級到mysql-connector-java-5.1.15-bin.jar時,正常工作間歇性地開始。將查詢複製到Windows上的Squirrel SQL客戶端會導致它正常工作。
該servlet使用Apache POI使用該查詢的結果創建一個電子表格。
這種軟件組合存在一個已知問題嗎?
新信息**
這不是與查詢的長度做。下面是聲明,堆棧跟蹤和表定義的一個簡短例子,其名稱已更改以保護無辜者;請注意,servlet成功了一些時間,查詢在粘貼到Squirrel SQL時正常工作。客戶端或服務器端沒有其他消息或警告。還有一些類似的查詢在100%的時間內持續工作。
查詢
SELECT SQL_CALC_FOUND_ROWS aa_bbb_cccc.id, aa_bbb_cccc.user_id, aa_bbb_cccc.user, aa_bbb_cccc.state, aa_bbb_cccc.time_stamp, aa_bbb_cccc.c20, aa_bbb_cccc.c12, aa_bbb_cccc.c21, aa_bbb_cccc.c22, aa_bbb_cccc.c23, aa_bbb_cccc.c13, aa_bbb_cccc.c15, aa_bbb_cccc.c14, aa_bbb_cccc.c16, aa_bbb_cccc.c13b, aa_bbb_cccc.c13c FROM aa_bbb_cccc WHERE 1=1
堆棧跟蹤
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;
您可以發送您正在使用的查詢嗎? – sunleo
他說他不被允許顯示查詢。你有權訪問MySQL服務器日誌嗎?您可能需要打開常規查詢日誌並打開所有警告選項。請參閱http://dev.mysql.com/doc/refman/5.0/en/server-logs.html –
原來,它與JDBC無關(即使尚未解決)。從tomcat服務器的mysql命令行客戶端也會出現同樣的問題。該查詢在本地運行良好,並且在另一主機上使用JDBC客戶端運行。 –