0

開発環境リファレンス:

Fedora FC18
Tomcat Server 7.0.39 (localhost config)
Eclipse Juno Release 2
Mysql-connecor-java Ver. 5.1.26 (jar)
Mysql-server Ver. 5.5.32 (jar)

次の select ステートメントは、「列 '深さ' が見つかりません」で失敗します。

"select node.subEntityID, node.lft, node.rgt, (count(parent.subEntityID) - 1) as depth
 from ENTITY as node, ENTITY as parent
 where node.lft between parent.lft and parent.rgt
 group by node.subEntityID order by node.lft";

この select ステートメントは、コマンドレベルの mysql を次のように使用して成功します。

use dbName;
select node.subEntityID, node.lft, node.rgt, (count(parent.subEntityID) - 1) as depth
  from ENTITY as node, ENTITY as parent
  where node.lft between parent.lft and parent.rgt
  group by node.subEntityID order by node.lft;

MySQL Workbench ver.2.0 で SQL クエリを使用すると、select ステートメントも成功します。5.2.4.7.

関連する Java コード フラグメントを以下に示します。

rs = stmt.executeQuery(typeEntityList);
// The depth alias does not print out in this for loop
for (int i=1; i<rs.getMetaData().getColumnCount()+1; i++) {
    System.out.println(rs.getMetaData().getColumnName(i));
    System.out.println(rs.getMetaData().getColumnLabel(i));
}
while (rs.next()) {
    // "depth" fails at the following statement
    System.out.println("depth: " + rs.getInt("depth"));
    String s = rs.getString("lft") + "  "
        + rs.getString("subEntityID") + "  "
        + rs.getString("rgt");
    System.out.println(s);
    entityList.add(s);
}

また、Google 検索で、MySQL のエイリアスの動作が最近のバージョンで変更されていることがわかりました。提案された修正は、MySQL 接続文字列に追加"?useOldAliasMetadataBehavior=true"して元の動作に戻すことでしたが、それでも問題は修正されませんでした。

スタック トレースは次のとおりです。

java.sql.SQLException: 列 '深さ' が見つかりません。com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1078) com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989) com.mysql.jdbc.SQLError.createSQLException(SQLError.java:975) ) com.mysql.jdbc.SQLError.createSQLException(SQLError.java:920) で com.mysql.jdbc.ResultSetImpl.findColumn(ResultSetImpl.java:1167) で com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java: 5733) EntityAssessmentEntityActions.EntityAssessmentEntityListAction.detailedEntityList(EntityAssessmentEntityListAction.java:184) で EntityAssessmentEntityActions.EntityAssessmentEntityListAction.execute(EntityAssessmentEntityListAction.java:69) で.java:57) で、sun.reflect で。

4

2 に答える 2

0

プロジェクトで同様の問題が発生しました(Eclipse Lunaを使用しています)。

私がそれを克服する方法は、MysqlDataSourcesetUseOldAliasMetadataBehavior(true)に設定することです。

于 2015-07-27T06:51:49.390 に答える
0

StackOverflow メンバーの皆さん、私は問題を発見しましたが、今では何時間も髪を引っ張っていたので禿げています。

Eclipse Juno では、Java ソースの「Organnize Imports」を選択できます。"したがって、未定義の変数がある場合は、この便利なオプションを使用してインポートをクリアします。Eclipse Juno は、mysql コネクタ、"java.sql. 「com.mysql.jdbc.connection」コネクターの代わりに「connection」を使用してください。Java ソースのインポートを変更したので、このサーブレットで作業を進めることができました。または ?. ... ロイ W.

于 2013-09-13T21:24:06.193 に答える