Jfinal异常 ActiveRecordException: Only ONE COLUMN can be queried

    技术2025-11-09  5

    [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)

    今天莫名其妙的报了这个错,从报错的字面上看说的是是能查询一列,看了源码具体报错的地方

    /** * Execute sql query just return one column. * @param <T> the type of the column that in your sql's select statement * @param sql an SQL statement that may contain one or more '?' IN parameter placeholders * @param paras the parameters of sql * @return List<T> */ 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(sql.toString(),userId,userId); 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的原因,查询总条数时查询了多个字段造成的

    Processed: 0.023, SQL: 9