0

不明な列エラーを含む数百の質問がありますが、数十を調べた後、私の問題と同じものはありません。これらはすべて実際にはselectステートメントのエラーのようですが、私の場合、selectステートメントはa)servltから機能する場合があり、b)PHPから一貫して機能し、c)SquirrelSQLクライアントから一貫して機能します。

私はレガシーシステムを持っていて、クエリを制御できません。クエリは、PHPmysqlから何年もの間正常に機能しています。このエラーは断続的に発生します。

たとえば、昨夜はすべてのレポートが正しく機能していました。今朝、サービスを再試行しましたが、Tomcatサーバー(Linux Centos、Java 1.6、Tomcat 6)からのMySQLSyntaxErrorExceptionで一部のクエリが失敗しました。warファイルのコピーをTomcatのwebappディレクトリにコピーして、Tomcatにサーブレットをリロードさせたところ、クエリが再び正しく機能しました。別のホスト上のMySQLサーバーは、Centos5では5.0.17です。

詳細:昨日、Tomcatがしばらくアイドル状態だったときに発生したようです。数時間後にアプリケーションに戻ったとき、非常に複雑なクエリで一時的にこのエラーが発生しました。アプリケーションには、機能したそれほど複雑でないクエリがたくさんあります。これらを数回実行すると、突然、複雑なクエリが機能し始めました。これは昨日3、4回起こりました。しかし、反例として、複雑なクエリは今朝初めて機能しました。これはTomcat5.5でも発生しています。

mysqlサーバーログにメッセージはありません。最大パケット長を増やしましたが、現時点では警告をオンにできません。

また、このクエリはmysql-connector-java-5.1.22-bin.jarで一貫して失敗していましたが、mysql-connector-java-5.1.15-bin.jarにダウングレードすると、正しく動作が断続的に開始されました。クエリをWindowsのSquirrelSQLクライアントにコピーすると、正しく機能します。

サーブレットはApachePOIを使用して、このクエリの結果を使用してスプレッドシートを作成しています。

このソフトウェアの組み合わせに既知の問題はありますか?

新情報 **

クエリの長​​さとは関係ありません。これは、ステートメント、スタックトレース、および無実を保護するために名前が変更されたテーブル定義の短い例です。サーブレットは時々成功し、SquirrelSQLに貼り付けるとクエリは正常に機能することに注意してください。クライアント側にもサーバー側にも、他のメッセージや警告はありません。一貫して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;
4

1 に答える 1

1

パケットを失っているに違いありません。サーバー ログまたはネットワーク デバイスを調べて、パケットがドロップされていないか、問題があるかどうかを確認します。

于 2012-10-28T18:34:29.840 に答える