開発環境リファレンス:
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 で。