JPA-style positional param was not an integral ordinal

在书写sql 的时候遇到了这样的错误,刚开始不理解错误在哪里, 自己看了下sql也没有问题,然后自己就尝试dubug 把sql打印了出来,
 SELECT
        a.PRODUCT_CODE,
a.product_name,
sum(a.sale_quantity)/200 AS QUANTITY
        FROM
        sales_detail_report_form AS a
LEFT JOIN product p ON p.`code` = a.PRODUCT_CODE 
LEFT JOIN area_convert ac ON ac.BRANCH_ID = a.BRANCH_CODE
        WHERE
   a.order_date BETWEEN ?1 AND ?2AND p.supplier_code = ?3AND ac.SZYC_AREA = ?4GROUP BY a.PRODUCT_CODE
打印的结果就是这样, 然后自己发现了,在?3占位符 后面紧跟的是AND 这样会导致sql识别错误,应该使用空格或者换行符分割开来,
  StringBuffer sql = new StringBuffer(" SELECT\n" +
                "        a.PRODUCT_CODE,\n" +
                "        FROM\n" +
                "        sales_detail_report_form AS a\n" +
                "LEFT JOIN product p ON p.`code` = a.PRODUCT_CODE \n" +
                "LEFT JOIN area_convert ac ON ac.BRANCH_ID = a.BRANCH_CODE\n" +
                "        WHERE\n" +
                "   a.order_date BETWEEN ?1 AND ?2\n");
        if (!StringUtil.isEmpty(dto.getSupplierCode())){
            sql.append(" AND p.supplier_code = ?3\n");
        }
        if (!StringUtil.isEmpty(dto.getAreaCode())) {
            sql.append(" AND ac.SZYC_AREA = ?4\n");
        }
        sql.append(" GROUP BY a.PRODUCT_CODE");

然后自己在每个sql后面加了换行符\n 运行就可以了,还有可能因为一个字母拼写错误,或者加个分号等等都会会出现这个错误.出现错误我们首先就是找个错误的方法,找对了方法,解决错误会更快,还能避免下次犯错.

猜你喜欢

转载自blog.csdn.net/qq_37962402/article/details/80048238