sql语句在数据库中运行正常,但在程序中报缺少右括号错误,求各位大神帮忙解答
含声不语 2017-05-15 09:10:05 @SuppressWarnings({ "rawtypes", "unchecked" })
public Page<CrmBoExp> findPageBySql2(String excontract, String sum,final int pageNum, final int pageSize) {
logger.debug("findPage CrmBo instance");
StringBuffer sb = new StringBuffer("select temp1.expsigncontract excontract, temp1.researcherList message, temp2.probudget sum "+
" from (SELECT expsigncontract, LTRIM(text, ',') researcherList"+
" FROM ( SELECT ROW_NUMBER() OVER(PARTITION BY expsigncontract ORDER BY expsigncontract,lvl DESC) rn, expsigncontract, text"+
" FROM (SELECT expsigncontract,LEVEL lvl, SYS_CONNECT_BY_PATH(bmbm || probudget || '(万元)', ',') text"+
" FROM ( select sum(temp.probudget) probudget, temp.expsigncontract,temp.bmbm,ROW_NUMBER() OVER(PARTITION BY expsigncontract ORDER BY temp.expsigncontract, temp.bmbm) x"+
" from (select t.boid,"+
" t.state, t.probudget, to_char(t.expsigncontract, 'yyyy-mm') expsigncontract,t1.mc,"+
" (select s.mc from crm_deps s where s.bmbm = substr(t1.bmbm, 1, 4)) bmbm from crm_bo t"+
" left join crm_deps t1 on t.createuserdeptid = t1.obj_id where t.expsigncontract is not null) temp group by temp.expsigncontract, temp.bmbm"+
" order by temp.expsigncontract, temp.bmbm) a CONNECT BY expsigncontract = PRIOR expsigncontract"+
" AND x - 1 = PRIOR x)) WHERE rn = 1 ORDER BY expsigncontract) temp1"+
" left join ( select sum(temp.probudget) probudget, temp.expsigncontract"+
" from (select t.boid, t.state, t.probudget, to_char(t.expsigncontract, 'yyyy-mm') expsigncontract, t1.mc,"+
" (select s.mc from crm_deps s where s.bmbm = substr(t1.bmbm, 1, 4)) bmbm"+
" from crm_bo t left join crm_deps t1 on t.createuserdeptid = t1.obj_id) temp "+
" group by temp.expsigncontract"+
" order by temp.expsigncontract) temp2"+
" on temp1.expsigncontract = temp2.expsigncontract");
ArrayList<Object> value = new ArrayList<Object>();
if (!StringUtil.isNullOrEmpty(excontract)) {
sb.append(" where temp1.expsigncontract=?");
value.add(excontract);
}
if (!StringUtil.isNullOrEmpty(sum)) {
sb.append(" where temp2.probudget=?");
value.add(sum);
}
final Object values[] = value.toArray();
final String sql = sb.toString();
List list = hibernateDao.getPojoTemplate().executeFind(
new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
SQLQuery query = session.createSQLQuery(sql);
if (values != null && values.length > 0) {
for (int i = 0; i < values.length; i++)
query.setParameter(i, values[i]);
}
List result = query.setFirstResult((pageNum - 1) * pageSize).setMaxResults(pageSize).list();
System.out.println(pageNum);
return result;
}
});
long recordCount = PageUtil.getCountBySql(hibernateDao.getPojoTemplate().getSessionFactory(), sql, values);//后台打印的时候这里出现错误
HResultSetExtractor hrs = new HResultSetExtractor(list, CrmBoSum.class);
Page page = Page.EMPTY;
try {
page = new Page(hrs.extract(),recordCount, pageNum, pageSize);
} catch (Exception e) {
e.printStackTrace();
logger.error("findPage CrmBo failed", e);
}
return page;
}