развития окружающей среды Ссылка:MySQL выберите оператор с псевдонимом терпит неудачу с колонкой не найден
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 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 как
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;
Оператор select также преуспевает при использовании SQL-запрос в MySQL Workbench ver. 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 изменилось в последних версиях. Рекомендуемое исправление заключалось в том, чтобы добавить "?useOldAliasMetadataBehavior=true"
в строку подключения MySQL, чтобы вернуться к исходному поведению, но это не исправило проблему.
Вот трассировки стека:
java.sql.SQLException: Колонка 'Глубина' не найден. at 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) в sun.reflect.NativeMethodAccessorImpl.invoke0 (нативный метод) при sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:57) на sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) в java.lang.reflect.Method.invoke (Method.java:606) в com.opensymphony.xwork2.DefaultActionInv ocation.invokeAction (DefaultActionInvocation.java:450) в com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly (DefaultActionInvocation.java:289) в com.opensymphony.xwork2.DefaultActionInvocation.invoke (DefaultActionInvocation.java:252) на org.apache.struts2 .interceptor.debugging.DebuggingInterceptor.intercept (DebuggingInterceptor.java:256) в com.opensymphony.xwork2.DefaultActionInvocation.invoke (DefaultActionInvocation.java:246) в com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept (DefaultWorkflowInterceptor.java:176) в com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept (MethodFilterInterceptor.java:98) в com.opensymphony.xwork2.DefaultActionInvocation.invoke (DefaultActionInvocation.java:246) в com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept (ValidationInterceptor.java:265) at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept (AnnotationValidationInterceptor.java:68) at com. opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept (MethodFilterInterceptor.java:98) в com.opensymphony.xwork2.DefaultActionInvocation.invoke (DefaultActionInvocation.java:246) в com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept (ConversionErrorInterceptor.java: 138) в com.opensymphony.xwork2.DefaultActionInvocation.invoke (DefaultActionInvocation.java:246) в com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept (ParametersInterceptor.java:249) в com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept (MethodFilterInterceptor.java:98) в com.opensymphony.xwork2.DefaultActionInvocation.invoke (DefaultActionInvocation.java:246) в com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept (ParametersInterceptor.java:249) в com.opensymphony.xwork2. interceptor.MethodFilterInterceptor.перехват (MethodFilterInterceptor.java:98) в com.opensymphony.xwork2.DefaultActionInvocation.invoke (DefaultActionInvocation.java:246) в com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept (StaticParametersInterceptor.java:191) в com.opensymphony.xwork2 .DefaultActionInvocation.invoke (DefaultActionInvocation.java:246) в org.apache.struts2.interceptor.MultiselectInterceptor.intercept (MultiselectInterceptor.java:73) в com.opensymphony.xwork2.DefaultActionInvocation.invoke (DefaultActionInvocation.java:246) в org. apache.struts2.interceptor.CheckboxInterceptor.intercept (CheckboxInterceptor.java:91) в com.opensymphony.xwork2.DefaultActionInvocation.invoke (DefaultActionInvocation.java:246) в org.apache.struts2.interceptor.FileUploadInterceptor.intercept (FileUploadInterceptor.java: 252) в com.opensymphony.xwork2.DefaultActionInvocation.invoke (DefaultActionInvocation.java:246) в com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept (ModelDrivenIntercept or.java:100) в com.opensymphony.xwork2.DefaultActionInvocation.invoke (DefaultActionInvocation.java:246) в com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept (ScopedModelDrivenInterceptor.java:141) в com.opensymphony.xwork2.DefaultActionInvocation .invoke (DefaultActionInvocation.java:246) в com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept (ChainingInterceptor.java:145) в com.opensymphony.xwork2.DefaultActionInvocation.invoke (DefaultActionInvocation.java:246) в com.opensymphony. xwork2.interceptor.PrepareInterceptor.doIntercept (PrepareInterceptor.java:171) в com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept (MethodFilterInterceptor.java:98) в com.opensymphony.xwork2.DefaultActionInvocation.invoke (DefaultActionInvocation.java:246) at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept (I18nInterceptor.java:176) в com.opensymphony.xwork2.DefaultActionInvocation.invoke (DefaultActionInvocation.java:246) на org.apache.s truts2.interceptor.ServletConfigInterceptor.intercept (ServletConfigInterceptor.java:164) в com.opensymphony.xwork2.DefaultActionInvocation.invoke (DefaultActionInvocation.java:246) в com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept (AliasInterceptor.java:193) at com.opensymphony.xwork2.DefaultActionInvocation.invoke (DefaultActionInvocation.java:246) в com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept (ExceptionMappingInterceptor.java:187) в com.opensymphony.xwork2.DefaultActionInvocation.invoke (DefaultActionInvocation.java : 246) в org.apache.struts2.impl.StrutsActionProxy.execute (StrutsActionProxy.java:54) в org.apache.struts2.dispatcher.Dispatcher.serviceAction (Dispatcher.java:546) в org.apache.struts2.dispatcher. ng.ExecuteOperations.executeAction (ExecuteOperations.java:77) в org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter (StrutsPrepareAndExecuteFilter.java:91) на org.apache.catalina.core.ApplicationFilterChain.i nternalDoFilter (ApplicationFilterChain.java:243) в org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:210) на org.apache.catalina.core.StandardWrapperValve.invoke (StandardWrapperValve.java:222) на org.apache .catalina.core.StandardContextValve.invoke (StandardContextValve.java:123) в org.apache.catalina.authenticator.AuthenticatorBase.invoke (AuthenticatorBase.java:472) на org.apache.catalina.core.StandardHostValve.invoke (StandardHostValve.java : 171) на org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:99) на org.apache.catalina.valves.AccessLogValve.invoke (AccessLogValve.java:947) на org.apache.catalina.core. StandardEngineValve.invoke (StandardEngineValve.java:118) в org.apache.catalina.connector.CoyoteAdapter.service (CoyoteAdapter.java:408) на org.apache.coyote.http11.AbstractHttp11Processor.process (AbstractHttp11Processor.java:1009) в org .apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process (AbstractProtocol.java:589) на org.apache.tomcat.util.net.JIoEndpoint $ SocketProcessor.run (JIoEndpoint.java:312) на java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1145) на java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:615) в java.lang.Thread.run (Thread.java:724)
Ваша ошибка не имеет смысла. 'depth' никогда не ссылается в запросе. Он определяется как псевдоним столбца. Вы уверены, что это SQL, который вы выполняете? –
Привет, Крис, Спасибо за ваш быстрый ответ. Я попытался уменьшить приведенный выше код Java-сервлета как можно более простой, чтобы упростить задачу. При этом я, вероятно, сделал это более запутанным. В любом случае «typeEntityList» является переменной String и определяется как «select node.subEntityID, node.lft, node.rgt, (count (parent.subEntityID) - 1) как глубина от ENTITY как узел, ENTITY как родительский, где узел .lft между parent.lft и parent.rgtgroup by node.subEntityID order by node.lft ". У вас есть пример того, как получить псевдоним столбца в сервлете Java? Спасибо. Roy – user2766845
Вы пытались использовать 'rs.getInt (4)' вместо 'rs.getInt (" depth ")'? Также попробуйте 'rs.getString (4)' вместо getInt, потому что count (*) в MySql имеет тип bigint (22) и не вписывается в тип java целого типа, и вызов getInt, безусловно, заканчивается конверсией ошибка . – krokodilko