簡體   English   中英

帶有別名的MySQL select語句失敗,找不到列

[英]MySQL select statement with alias fails with column not found

開發環境參考:

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)

以下選擇語句失敗,並顯示“未找到列'depth'”:

"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;

在MySQL Workbench ver中使用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的別名行為在最新版本中已更改。 建議的解決方法是將"?useOldAliasMetadataBehavior=true"附加到MySQL連接字符串以恢復到原始行為,但這不能解決問題。

這是堆棧跟蹤:

java.sql.SQLException:找不到列“深度”。 在com.mysql.jdbc.SQLError.createSQLException(SQLError.java:975)在com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989)在com.mysql.jdbc.SQLError.createSQLException(SQLError.java:975) )com.mysql.jdbc.ResultSetImpl.findColumn(ResultSetImpl.java:1167)com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:com.mysql.jdbc.ResultSetImpl.findColumn(ResultSetImpl.java:1167)處com.mysql.jdbc.SQLError.createSQLException(SQLError.java:920) 5733)在EntityAssessmentEntityActions.EntityAssessmentEntityListAction.detailedEntityList(EntityAssessmentEntityListAction.java:184)在EntityAssessmentEntityActions.EntityAssessmentEntityListAction.execute(EntityAssessmentEntityListAction.java:69)在sun.reflect.NativeMethodAccessorImpl.inoke.NativeMethodAccessorImpl.in .java:57)位於sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)位於com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActi)上java.lang.reflect.Method.invoke(Method.java:606)處 com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:289)上的onInvocation.java:450)org.apache.struts2.interceptor.debugging處com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:252)上的onInvocation.java com處com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)處的com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:176)處的.DebuggingInterceptor.intercept(DebuggingInterceptor.java:256)。在com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)處的opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)在com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java 265),位於com.opensymphony.xwork2.interceptor的org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)處。 在com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)處的MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)在com.opensymphony的com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138)處com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98處的.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)在com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:249) )com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:249)com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept( com.opensymphony.xwork2.DefaultActionInvocation.invoke上的MethodFilterInterceptor.java:98)(com.opensymphony.xwork2.int上的DefaultActionInvocation.java:246) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)的erceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:191)在org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:73)處org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:91)上的.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246),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 com.opensymphony.xwork2.DefaultActionInvocation.invoke的ModelDrivenInterceptor.java:100).com.opensymphony.xwork2.interceptor.ScopedModelDrivenInte(DefaultActionInvocation.java:246) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)的com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145)的rceptor.intercept(ScopedModelDrivenInterceptor.java:141) com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171)處的.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)在com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) )在com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)在com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:176)在com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation。 org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)上的com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvoc)上的java:246) ation.java:246)com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:193)com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)com.opensymphony.xwork2.interceptor org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54)上的com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)上的.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:187)。 org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)處的apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:546)在org.apache.struts2.dispatcher.ng.filter處。 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243 :)的StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)在org.org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) .apache.catalina。 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)org.apache.catalina.authenticator.Authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)的core.StandardContextValve.invoke(StandardContextValve.java:123)在org.apache.catalina.valv.ErrorReportValve.invoke(ErrorReportValve.java:99)在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。位於org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process(AbstractProtocol.java:589)的coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1009)在org.apache.tomcat.util.net.JIoEndpoint $ SocketProcessor.run( JIoEndpoint.java:312),位於java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:11 45)在java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:615)在java.lang.Thread.run(Thread.java:724)

好的StackOverflow成員,我發現了問題,但現在我不願意在所有這些小時中拔頭發。

在Eclipse Juno上,可以選擇“組織Java源代碼的導入”。因此,當我有一個未定義的變量時,可以使用此方便的選項清除導入。EclipseJuno導入了mysql連接器“ java.sql。連接”,而不是“ com.mysql.jdbc.connection”連接器。我更改了Java源代碼的導入,現在可以繼續使用該servlet了。但是在我獲得一些Propecia或Rogaine之后,沒有或?....羅伊·W。

我在項目中遇到了類似的問題(我正在使用Eclipse Luna)。

我克服它的方法是將MysqlDataSource設置為setUseOldAliasMetadataBehavior(true) ;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM