使用 PageHelper 异常 net.sf.jsqlparser.parser.ParseException: Encountered 解决方案

使用:

PageHelper.startPage(reqVo.getPageIndex(), reqVo.getPageSize());
PageHelper.orderBy(" id desc");

我的sql:

<if test="distributeWarnType == 10">
       AND  t.expected_distribute_date <![CDATA[ <=  ]]> date_add(t.release_date, interval #{period,jdbcType=INTEGER}  day)
</if>

异常:

net.sf.jsqlparser.parser.ParseException: Encountered " <S_IDENTIFIER> "t "" at line 32, column 65.
Was expecting one of:
    "+" ...
    "+" ...
    "+" ...
    "+" ...
    "+" ...
    "+" ...

    "+" ...

at net.sf.jsqlparser.parser.CCJSqlParser.generateParseException(CCJSqlParser.java:16395)
at net.sf.jsqlparser.parser.CCJSqlParser.jj_consume_token(CCJSqlParser.java:16248)
at net.sf.jsqlparser.parser.CCJSqlParser.RegularCondition(CCJSqlParser.java:5057)
at net.sf.jsqlparser.parser.CCJSqlParser.Condition(CCJSqlParser.java:4752)
at net.sf.jsqlparser.parser.CCJSqlParser.AndExpression(CCJSqlParser.java:4713)
at net.sf.jsqlparser.parser.CCJSqlParser.OrExpression(CCJSqlParser.java:4651)

at net.sf.jsqlparser.parser.CCJSqlParser.Expression(CCJSqlParser.java:4622)

原因:

1.java代码:

    确定是由于【PageHelper.orderBy(params.get("orderBy").toString());】这段代码引起的

[java]  view plain  copy
  1. @Override  
  2. public List<Clerk> findClerkList(Map<String, Object> params) {  
  3.     PageHelper.startPage(((Integer) params.get("pageNum")),  
  4.             ((Integer) params.get("pageSize")));  
  5.     if (params.containsKey("orderBy")) {  
  6.         if (!StringUtil.empty(params.get("orderBy").toString())) {  
  7.             PageHelper.orderBy(params.get("orderBy").toString());  
  8.     }  
  9.     }  
  10.     List<Clerk> clerkList = clerkMapper.findClerkList(params);  
  11.     for (Clerk c : clerkList){  
  12.         String sellerStartLevel = StartLevelEnum.getEnumValueByKey(c.getSellerStartLevel());  
  13.         c.setSellerStartLevel(sellerStartLevel);  
  14.     }  
  15.     return clerkList;  
  16. }  

    完整异常如下:

        由【net.sf.jsqlparser.JSQLParserException】可看出是因为组装的sql语句解析过程中抛出"RuntimeException异常",异常被程序捕抓处理且未出现新异常,异常后的代码继续执行,所以不影响一个完整Retrieve操作。而一些"RuntimeException异常",例如:空指针(NullPointerException)、数组越界(IndexOutOfBoundsException)、类型转换(ClassCastException)等会被JVM自动处理,会在console控制台捕抓并打印异常日志。

解决方案:    
将 排序 写死到sql中,不要使用 

PageHelper.orderBy(" id desc");

sql:

<if test="arriveWarnType == 50">
    <![CDATA[   AND  t.actual_arrive_date >  t.contract_end_date ]]>
</if>
 order by id desc


猜你喜欢

转载自blog.csdn.net/woshiyeguiren/article/details/80770210