[ERROR
]-[Thread
: http
-apr
-80-exec
-6]-[com
.jfinal
.core
.ActionHandler
.handle()]: /activity
/query
?page
=1&limit
=10
com
.jfinal
.plugin
.activerecord
.ActiveRecordException
: Only ONE COLUMN can be queried
.
at com
.jfinal
.plugin
.activerecord
.DbPro
.queryColumn(DbPro
.java
:151)
at com
.jfinal
.plugin
.activerecord
.DbPro
.queryLong(DbPro
.java
:178)
at com
.jfinal
.plugin
.activerecord
.Db
.queryLong(Db
.java
:110)
at com
.yoncent
.model
.activity
.ActivityApplyfor
.selectActivityByRoles(ActivityApplyfor
.java
:21)
at com
.yoncent
.manager
.activity
.ActivityApplyforManager
.queryActivityByRoles(ActivityApplyforManager
.java
:22)
at com
.yoncent
.action
.activity
.ActivityApplyforController
.query(ActivityApplyforController
.java
:17)
at sun
.reflect
.NativeMethodAccessorImpl
.invoke0(Native Method
)
at sun
.reflect
.NativeMethodAccessorImpl
.invoke(NativeMethodAccessorImpl
.java
:62)
at sun
.reflect
.DelegatingMethodAccessorImpl
.invoke(DelegatingMethodAccessorImpl
.java
:43)
at java
.lang
.reflect
.Method
.invoke(Method
.java
:498)
at com
.jfinal
.aop
.Invocation
.invoke(Invocation
.java
:73)
at com
.jfinal
.ext
.interceptor
.SessionInViewInterceptor
.intercept(SessionInViewInterceptor
.java
:44)
at com
.jfinal
.aop
.Invocation
.invoke(Invocation
.java
:67)
at com
.jfinal
.core
.ActionHandler
.handle(ActionHandler
.java
:74)
at com
.jfinal
.ext
.handler
.ContextPathHandler
.handle(ContextPathHandler
.java
:47)
at com
.yoncent
.handler
.SessionHandler
.handle(SessionHandler
.java
:96)
at com
.yoncent
.handler
.FrontHandler
.handle(FrontHandler
.java
:55)
at com
.jfinal
.core
.JFinalFilter
.doFilter(JFinalFilter
.java
:72)
at org
.apache
.catalina
.core
.ApplicationFilterChain
.internalDoFilter(ApplicationFilterChain
.java
:241)
at org
.apache
.catalina
.core
.ApplicationFilterChain
.doFilter(ApplicationFilterChain
.java
:208)
at org
.apache
.catalina
.core
.StandardWrapperValve
.invoke(StandardWrapperValve
.java
:219)
at org
.apache
.catalina
.core
.StandardContextValve
.invoke(StandardContextValve
.java
:110)
at org
.apache
.catalina
.authenticator
.AuthenticatorBase
.invoke(AuthenticatorBase
.java
:492)
at org
.apache
.catalina
.core
.StandardHostValve
.invoke(StandardHostValve
.java
:165)
at org
.apache
.catalina
.valves
.ErrorReportValve
.invoke(ErrorReportValve
.java
:104)
at org
.apache
.catalina
.valves
.AccessLogValve
.invoke(AccessLogValve
.java
:1025)
at org
.apache
.catalina
.core
.StandardEngineValve
.invoke(StandardEngineValve
.java
:116)
at org
.apache
.catalina
.connector
.CoyoteAdapter
.service(CoyoteAdapter
.java
:452)
at org
.apache
.coyote
.http11
.AbstractHttp11Processor
.process(AbstractHttp11Processor
.java
:1201)
at org
.apache
.coyote
.AbstractProtocol$AbstractConnectionHandler
.process(AbstractProtocol
.java
:654)
at org
.apache
.tomcat
.util
.net
.AprEndpoint$SocketProcessor
.doRun(AprEndpoint
.java
:2532)
at org
.apache
.tomcat
.util
.net
.AprEndpoint$SocketProcessor
.run(AprEndpoint
.java
:2521)
at java
.util
.concurrent
.ThreadPoolExecutor
.runWorker(ThreadPoolExecutor
.java
:1149)
at java
.util
.concurrent
.ThreadPoolExecutor$Worker
.run(ThreadPoolExecutor
.java
:624)
at org
.apache
.tomcat
.util
.threads
.TaskThread$WrappingRunnable
.run(TaskThread
.java
:61)
at java
.lang
.Thread
.run(Thread
.java
:748)
今天莫名其妙的报了这个错,从报错的字面上看说的是是能查询一列,看了源码具体报错的地方
public <T> T
queryColumn(String sql
, Object
... paras
) {
List
<T> result
= query(sql
, paras
);
if (result
.size() > 0) {
T temp
= result
.get(0);
if (temp
instanceof Object[])
throw new ActiveRecordException("Only ONE COLUMN can be queried.");
return temp
;
}
return null
;
}
我在这里断点了,已经看到查询出来的结果了,在第二个if中temp instanceof Object[]这里为true,又想到instanceof这个关键字,会不会是数据的类型问题,经过我的测试,不是数据的问题,后来不知道怎么点到了dao层,然后就知道了。。。
Long aLong
= Db
.queryLong("select count(id) from activity_applyfor where sqr_id = ? and sqr_dept = ?",userId
,userId
);
哎,CV了上一个方法的查询,没有改正过来,这里查询总条数只要查询一个字段就行了,而我这里是查询了很多字段,怪不得他会报Only ONE COLUMN can be queried这样的错。 出现Only ONE COLUMN can be queried的原因,查询总条数时查询了多个字段造成的