unexpected token异常



unexpected token异常在开发中需要输入查询,遇到了下面的异常信息

Java代码 复制代码 收藏代码
  1. 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]
  2.     at org.hibernate.hql.ast.QuerySyntaxException.convert(QuerySyntaxException.java:54)
  3.     at org.hibernate.hql.ast.QuerySyntaxException.convert(QuerySyntaxException.java:47)
  4.     at org.hibernate.hql.ast.ErrorCounter.throwQueryException(ErrorCounter.java:82)
  5.     at org.hibernate.hql.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:284)
  6.     at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:182)
  7.     at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:136)
  8.     at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:101)
  9.     at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:80)
  10.     at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:124)
  11.     at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:156)
  12.     at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:135)
  13.     at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1770)
  14.     at net.bolue.oa.dao.impl.BlOaMailBoxDAOImpl.selectByAll(BlOaMailBoxDAOImpl.java:274)
  15.     at net.bolue.oa.service.impl.BlOaMailServiceImpl.findList(BlOaMailServiceImpl.java:164)
  16.     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  17.     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
  18.     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
  19.     at java.lang.reflect.Method.invoke(Method.java:597)
  20.     at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:309)
  21.     at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
  22.     at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
  23.     at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)
  24.     at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
  25.     at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
  26.     at $Proxy18.findList(Unknown Source)
  27.     at net.bolue.oa.action.BlOaMailAction.receiveList(BlOaMailAction.java:127)
  28.     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  29.     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
  30.     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
  31.     at java.lang.reflect.Method.invoke(Method.java:597)
  32.     at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:269)
  33.     at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:170)
  34.     at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:425)
  35.     at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:228)
  36.     at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
  37.     at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)
  38.     at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
  39.     at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
  40.     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
  41.     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
  42.     at net.bolue.util.AccessFilter.doFilter(AccessFilter.java:48)
  43.     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
  44.     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
  45.     at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
  46.     at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
  47.     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
  48.     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
  49.     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
  50.     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
  51.     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
  52.     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
  53.     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
  54.     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
  55.     at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:859)
  56.     at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:579)
  57.     at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1555)
  58.     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代码是:

Java代码 复制代码 收藏代码
  1. Session session = getHibernateTemplate().getSessionFactory()
  2.     .getCurrentSession();
  3. StringBuffer queryString = new StringBuffer();
  4. queryString.append(“select    bmb.bombId,bmb.userid,bmb.bombType,bmb.bombState,bmb.bombRead,” +
  5.     ”b.bomId,b.bomTopic,b.userid,b.bomRecList,b.bomCopyList,b.bomSecList,b.bomTime,b.bomState,bmb.bomfId,f.bomfName,” +
  6.     ”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″);
  7. if (vo.getBomId() != null && !”".equals(vo.getBomId())) {
  8.     queryString.append(“ and bmb.bomId=:bomId”);
  9. }
  10. if (vo.getUserid() != 0) {
  11.     queryString.append(“ and bmb.userid=:userid”);
  12. }
  13. if (vo.getBombType() != null) {
  14.     queryString.append(“ and bmb.bombType=:bombType”);
  15. }
  16. if (vo.getBomfId() != null&&vo.getBomfId() !=0) {
  17.     queryString.append(“ and bmb.bomfId=:bomfId”);
  18. }
  19. if (vo.getBombState() != null) {
  20.     queryString.append(“ and bmb.bombState=:bombState”);
  21. }
  22. if (vo.getBombRead() != null) {
  23.     queryString.append(“ and bmb.bombRead=:bombRead”);
  24. }
  25. //按发送人查询
  26. if(vo.getSendName()!=null&&!”".equals(vo.getSendName())){
  27.     queryString.append(“ and s.userAccount like ”+”%”+vo.getSendName()+”%”);
  28. }
  29. //按邮件发送时间排列
  30. if(vo.getSortName()!=null&&vo.getSortName().equals(“bomTime”)&&vo.getSortorder()!=null&&!vo.getSortorder().equals(“”)){
  31.     queryString.append(“ order by b.”+ vo.getSortName() +” ”+ vo.getSortorder() );
  32. }
  33. //文件夹排列
  34. if(vo.getSortName()!=null&&vo.getSortName().equals(“folderName”)&&vo.getSortorder()!=null&&!vo.getSortorder().equals(“”)){
  35.     queryString.append(“ order by f.bomfName ”+ vo.getSortorder() );
  36. }
  37. //按是否已读状态排列
  38. if(vo.getSortName()!=null&&vo.getSortName().equals(“mailRead”)&&vo.getSortorder()!=null&&!vo.getSortorder().equals(“”)){
  39.     queryString.append(“ order by bmb.bombRead ”+ vo.getSortorder() );
  40. }
  41. //按发送人排列
  42. if(vo.getSortName()!=null&&vo.getSortName().equals(“senderName”)&&vo.getSortorder()!=null&&!vo.getSortorder().equals(“”)){
  43.     queryString.append(“ order by s.userAccount ”+ vo.getSortorder() );
  44. }
  45. //按邮件主题排列
  46. if(vo.getSortName()!=null&&vo.getSortName().equals(“bomTopic”)&&vo.getSortorder()!=null&&!vo.getSortorder().equals(“”)){
  47.     queryString.append(“ order by b.bomTopic ”+ vo.getSortorder() );
  48. }
  49. //按邮件类型排列
  50. if(vo.getSortName()!=null&&vo.getSortName().equals(“bomType”)&&vo.getSortorder()!=null&&!vo.getSortorder().equals(“”)){
  51.     queryString.append(“ order by bmb.bombType ”+ vo.getSortorder() );
  52. }
  53. Query q = session.createQuery(queryString.toString());
  54. if (vo.getBomId() != null && !”".equals(vo.getBomId())) {
  55.     q.setString(“bomId”, vo.getBomId());
  56. }
  57. if (vo.getUserid() != 0) {
  58.     q.setLong(“userid”, vo.getUserid());
  59. }
  60. if (vo.getBombType() != null) {
  61.     q.setInteger(“bombType”, vo.getBombType());
  62. }
  63. if (vo.getBomfId() != null&&vo.getBomfId() !=0) {
  64.     q.setLong(“bomfId”, vo.getBomfId());
  65. }
  66. if (vo.getBombState() != null) {
  67.     q.setInteger(“bombState”, vo.getBombState());
  68. }
  69. if (vo.getBombRead() != null) {
  70.     q.setInteger(“bombRead”, vo.getBombRead());
  71. }
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行的代码也改成下面的形式

Java代码 复制代码 收藏代码
  1. queryString.append(“ and s.userAccount like :sendName”);
queryString.append(" and s.userAccount like :sendName");

并且在后面也加上这段代码

Java代码 复制代码 收藏代码
  1. if(vo.getSendName()!=null&&!”".equals(vo.getSendName())){
  2.     q.setString(“sendName”, ”%”+vo.getSendName()+”%”);
  3. }
if(vo.getSendName()!=null&&!"".equals(vo.getSendName())){
	q.setString("sendName", "%"+vo.getSendName()+"%");
}