unexpected token异常在开发中需要输入查询,遇到了下面的异常信息
- org.hibernate.hql.ast.QuerySyntaxException: unexpected token: % near line 1, column 550 [select bmb.bombId,bmb.userid,bmb.bombType,bmb.bombState,bmb.bombRead,b.bomId,b.bomTopic,b.userid,b.bomRecList,b.bomCopyList,b.bomSecList,b.bomTime,b.bomState,bmb.bomfId,f.bomfName,bbu.userName,bbu.userAccount,bbu.empId,s.userName,s.userAccount from net.bolue.oa.vo.BlOaMailBox as bmb left outer join bmb.bm as b left outer join bmb.bmf as f left outer join bmb.blBasicUser as bbu left outer join b.sender as s where 1=1 and bmb.userid=:userid and bmb.bombType=:bombType and bmb.bombState=:bombState and bmb.bombRead=:bombRead and s.userAccount like %超级管理员% order by b.bomTime desc]
- at org.hibernate.hql.ast.QuerySyntaxException.convert(QuerySyntaxException.java:54)
- at org.hibernate.hql.ast.QuerySyntaxException.convert(QuerySyntaxException.java:47)
- at org.hibernate.hql.ast.ErrorCounter.throwQueryException(ErrorCounter.java:82)
- at org.hibernate.hql.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:284)
- at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:182)
- at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:136)
- at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:101)
- at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:80)
- at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:124)
- at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:156)
- at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:135)
- at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1770)
- at net.bolue.oa.dao.impl.BlOaMailBoxDAOImpl.selectByAll(BlOaMailBoxDAOImpl.java:274)
- at net.bolue.oa.service.impl.BlOaMailServiceImpl.findList(BlOaMailServiceImpl.java:164)
- at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
- at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
- at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
- at java.lang.reflect.Method.invoke(Method.java:597)
- at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:309)
- at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
- at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
- at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)
- at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
- at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
- at $Proxy18.findList(Unknown Source)
- at net.bolue.oa.action.BlOaMailAction.receiveList(BlOaMailAction.java:127)
- at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
- at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
- at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
- at java.lang.reflect.Method.invoke(Method.java:597)
- at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:269)
- at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:170)
- at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:425)
- at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:228)
- at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
- at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)
- at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
- at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
- at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
- at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
- at net.bolue.util.AccessFilter.doFilter(AccessFilter.java:48)
- at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
- at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
- at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
- at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
- at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
- at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
- at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
- at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
- at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
- at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
- at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
- at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
- at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:859)
- at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:579)
- at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1555)
- at java.lang.Thread.run(Thread.java:619)
org.hibernate.hql.ast.QuerySyntaxException: unexpected token: % near line 1, column 550 [select bmb.bombId,bmb.userid,bmb.bombType,bmb.bombState,bmb.bombRead,b.bomId,b.bomTopic,b.userid,b.bomRecList,b.bomCopyList,b.bomSecList,b.bomTime,b.bomState,bmb.bomfId,f.bomfName,bbu.userName,bbu.userAccount,bbu.empId,s.userName,s.userAccount from net.bolue.oa.vo.BlOaMailBox as bmb left outer join bmb.bm as b left outer join bmb.bmf as f left outer join bmb.blBasicUser as bbu left outer join b.sender as s where 1=1 and bmb.userid=:userid and bmb.bombType=:bombType and bmb.bombState=:bombState and bmb.bombRead=:bombRead and s.userAccount like %超级管理员% order by b.bomTime desc] at org.hibernate.hql.ast.QuerySyntaxException.convert(QuerySyntaxException.java:54) at org.hibernate.hql.ast.QuerySyntaxException.convert(QuerySyntaxException.java:47) at org.hibernate.hql.ast.ErrorCounter.throwQueryException(ErrorCounter.java:82) at org.hibernate.hql.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:284) at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:182) at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:136) at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:101) at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:80) at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:124) at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:156) at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:135) at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1770) at net.bolue.oa.dao.impl.BlOaMailBoxDAOImpl.selectByAll(BlOaMailBoxDAOImpl.java:274) at net.bolue.oa.service.impl.BlOaMailServiceImpl.findList(BlOaMailServiceImpl.java:164) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:309) at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202) at $Proxy18.findList(Unknown Source) at net.bolue.oa.action.BlOaMailAction.receiveList(BlOaMailAction.java:127) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:269) at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:170) at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:425) at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:228) at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913) at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462) at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at net.bolue.util.AccessFilter.doFilter(AccessFilter.java:48) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:859) at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:579) at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1555) at java.lang.Thread.run(Thread.java:619)
我的java代码是:
- Session session = getHibernateTemplate().getSessionFactory()
- .getCurrentSession();
- StringBuffer queryString = new StringBuffer();
- queryString.append(“select bmb.bombId,bmb.userid,bmb.bombType,bmb.bombState,bmb.bombRead,” +
- ”b.bomId,b.bomTopic,b.userid,b.bomRecList,b.bomCopyList,b.bomSecList,b.bomTime,b.bomState,bmb.bomfId,f.bomfName,” +
- ”bbu.userName,bbu.userAccount,bbu.empId,s.userName,s.userAccount” +” from BlOaMailBox as bmb left outer join bmb.bm as b left outer join bmb.bmf as f left outer join bmb.blBasicUser as bbu left outer join b.sender as s ” +”where 1=1″);
- if (vo.getBomId() != null && !”".equals(vo.getBomId())) {
- queryString.append(“ and bmb.bomId=:bomId”);
- }
- if (vo.getUserid() != 0) {
- queryString.append(“ and bmb.userid=:userid”);
- }
- if (vo.getBombType() != null) {
- queryString.append(“ and bmb.bombType=:bombType”);
- }
- if (vo.getBomfId() != null&&vo.getBomfId() !=0) {
- queryString.append(“ and bmb.bomfId=:bomfId”);
- }
- if (vo.getBombState() != null) {
- queryString.append(“ and bmb.bombState=:bombState”);
- }
- if (vo.getBombRead() != null) {
- queryString.append(“ and bmb.bombRead=:bombRead”);
- }
- //按发送人查询
- if(vo.getSendName()!=null&&!”".equals(vo.getSendName())){
- queryString.append(“ and s.userAccount like ”+”%”+vo.getSendName()+”%”);
- }
- //按邮件发送时间排列
- if(vo.getSortName()!=null&&vo.getSortName().equals(“bomTime”)&&vo.getSortorder()!=null&&!vo.getSortorder().equals(“”)){
- queryString.append(“ order by b.”+ vo.getSortName() +” ”+ vo.getSortorder() );
- }
- //文件夹排列
- if(vo.getSortName()!=null&&vo.getSortName().equals(“folderName”)&&vo.getSortorder()!=null&&!vo.getSortorder().equals(“”)){
- queryString.append(“ order by f.bomfName ”+ vo.getSortorder() );
- }
- //按是否已读状态排列
- if(vo.getSortName()!=null&&vo.getSortName().equals(“mailRead”)&&vo.getSortorder()!=null&&!vo.getSortorder().equals(“”)){
- queryString.append(“ order by bmb.bombRead ”+ vo.getSortorder() );
- }
- //按发送人排列
- if(vo.getSortName()!=null&&vo.getSortName().equals(“senderName”)&&vo.getSortorder()!=null&&!vo.getSortorder().equals(“”)){
- queryString.append(“ order by s.userAccount ”+ vo.getSortorder() );
- }
- //按邮件主题排列
- if(vo.getSortName()!=null&&vo.getSortName().equals(“bomTopic”)&&vo.getSortorder()!=null&&!vo.getSortorder().equals(“”)){
- queryString.append(“ order by b.bomTopic ”+ vo.getSortorder() );
- }
- //按邮件类型排列
- if(vo.getSortName()!=null&&vo.getSortName().equals(“bomType”)&&vo.getSortorder()!=null&&!vo.getSortorder().equals(“”)){
- queryString.append(“ order by bmb.bombType ”+ vo.getSortorder() );
- }
- Query q = session.createQuery(queryString.toString());
- if (vo.getBomId() != null && !”".equals(vo.getBomId())) {
- q.setString(“bomId”, vo.getBomId());
- }
- if (vo.getUserid() != 0) {
- q.setLong(“userid”, vo.getUserid());
- }
- if (vo.getBombType() != null) {
- q.setInteger(“bombType”, vo.getBombType());
- }
- if (vo.getBomfId() != null&&vo.getBomfId() !=0) {
- q.setLong(“bomfId”, vo.getBomfId());
- }
- if (vo.getBombState() != null) {
- q.setInteger(“bombState”, vo.getBombState());
- }
- if (vo.getBombRead() != null) {
- q.setInteger(“bombRead”, vo.getBombRead());
- }
Session session = getHibernateTemplate().getSessionFactory() .getCurrentSession(); StringBuffer queryString = new StringBuffer(); queryString.append("select bmb.bombId,bmb.userid,bmb.bombType,bmb.bombState,bmb.bombRead," + "b.bomId,b.bomTopic,b.userid,b.bomRecList,b.bomCopyList,b.bomSecList,b.bomTime,b.bomState,bmb.bomfId,f.bomfName," + "bbu.userName,bbu.userAccount,bbu.empId,s.userName,s.userAccount" +" from BlOaMailBox as bmb left outer join bmb.bm as b left outer join bmb.bmf as f left outer join bmb.blBasicUser as bbu left outer join b.sender as s " +"where 1=1"); if (vo.getBomId() != null && !"".equals(vo.getBomId())) { queryString.append(" and bmb.bomId=:bomId"); } if (vo.getUserid() != 0) { queryString.append(" and bmb.userid=:userid"); } if (vo.getBombType() != null) { queryString.append(" and bmb.bombType=:bombType"); } if (vo.getBomfId() != null&&vo.getBomfId() !=0) { queryString.append(" and bmb.bomfId=:bomfId"); } if (vo.getBombState() != null) { queryString.append(" and bmb.bombState=:bombState"); } if (vo.getBombRead() != null) { queryString.append(" and bmb.bombRead=:bombRead"); } //按发送人查询 if(vo.getSendName()!=null&&!"".equals(vo.getSendName())){ queryString.append(" and s.userAccount like "+"%"+vo.getSendName()+"%"); } //按邮件发送时间排列 if(vo.getSortName()!=null&&vo.getSortName().equals("bomTime")&&vo.getSortorder()!=null&&!vo.getSortorder().equals("")){ queryString.append(" order by b."+ vo.getSortName() +" "+ vo.getSortorder() ); } //文件夹排列 if(vo.getSortName()!=null&&vo.getSortName().equals("folderName")&&vo.getSortorder()!=null&&!vo.getSortorder().equals("")){ queryString.append(" order by f.bomfName "+ vo.getSortorder() ); } //按是否已读状态排列 if(vo.getSortName()!=null&&vo.getSortName().equals("mailRead")&&vo.getSortorder()!=null&&!vo.getSortorder().equals("")){ queryString.append(" order by bmb.bombRead "+ vo.getSortorder() ); } //按发送人排列 if(vo.getSortName()!=null&&vo.getSortName().equals("senderName")&&vo.getSortorder()!=null&&!vo.getSortorder().equals("")){ queryString.append(" order by s.userAccount "+ vo.getSortorder() ); } //按邮件主题排列 if(vo.getSortName()!=null&&vo.getSortName().equals("bomTopic")&&vo.getSortorder()!=null&&!vo.getSortorder().equals("")){ queryString.append(" order by b.bomTopic "+ vo.getSortorder() ); } //按邮件类型排列 if(vo.getSortName()!=null&&vo.getSortName().equals("bomType")&&vo.getSortorder()!=null&&!vo.getSortorder().equals("")){ queryString.append(" order by bmb.bombType "+ vo.getSortorder() ); } Query q = session.createQuery(queryString.toString()); if (vo.getBomId() != null && !"".equals(vo.getBomId())) { q.setString("bomId", vo.getBomId()); } if (vo.getUserid() != 0) { q.setLong("userid", vo.getUserid()); } if (vo.getBombType() != null) { q.setInteger("bombType", vo.getBombType()); } if (vo.getBomfId() != null&&vo.getBomfId() !=0) { q.setLong("bomfId", vo.getBomfId()); } if (vo.getBombState() != null) { q.setInteger("bombState", vo.getBombState()); } if (vo.getBombRead() != null) { q.setInteger("bombRead", vo.getBombRead()); }
导致错误的原因是28行,在这种情况下输入数字或英文可以通过,但是输入中文就报上面的错误。这可能是编码的问题,我却从另一个方面解决了这个问题:
将28行的代码也改成下面的形式
queryString.append(" and s.userAccount like :sendName");
并且在后面也加上这段代码
- if(vo.getSendName()!=null&&!”".equals(vo.getSendName())){
- q.setString(“sendName”, ”%”+vo.getSendName()+”%”);
- }
if(vo.getSendName()!=null&&!"".equals(vo.getSendName())){ q.setString("sendName", "%"+vo.getSendName()+"%"); }