java - 如何使用 DBUtil. 查找 SQL fetchlist 中的错误?
问题描述
我的 DBUtil 中有 fetchList 方法,如下所示。
public static List fetchList(String cols, String tables, String conditions) {
Session s = HibernateUtil.getSessionFactory().openSession();
List lst = null;
try {
if (s != null) {
log.debug("session is " + s.toString());
}
else {
log.debug("session is null");
}
Query q = s.createQuery(setColumn(cols) + " from " + tables + setConditions(conditions));
log.info("Prepared Query: "+q.toString());
q.setCacheable(true);
lst = q.list();
} catch (HibernateException e) {
log.error("DBUtil fetchlist1 error:", e);
} finally {
s.close();
}
return lst;
}
我正在传递以下参数进行查询。
List lst = DBUtil.fetchList("new map( COUNT(distinct username) as DistinctUser,\r\n" +
" COUNT(IF(searchParam='Account Sync',1,NULL)) AS 'AccountSync',\r\n" +
" COUNT(IF(searchParam='Account Info',1,NULL)) AS 'AccountInfo',\r\n" +
" COUNT(IF(searchParam='spectrum.net',1,NULL)) AS 'spectrum.net',\r\n" +
" COUNT(IF(searchParam='STVA',1,NULL)) AS 'STVA',\r\n" +
" COUNT(IF(searchParam like 'TVE%',1,NULL)) AS 'TVE',\r\n" +
" COUNT(IF(searchParam='sbnet',1,NULL)) AS 'sbnet',\r\n" +
" COUNT(IF(searchParam='OOH Info',1,NULL)) AS 'OOHInfo')", "CareToolAuditBO" , "date(accesseddate)='"+reportDate+"' AND username<>'Scheduled'");
但它给出了如下的mysql错误。
at com.caretool.controller.UsageEmailController.getEmailReport(UsageEmailController.java:35)
at com.caretool.scheduler.UsageReportMailTask.run(UsageReportMailTask.java:15)
at java.util.TimerThread.mainLoop(Timer.java:555)
at java.util.TimerThread.run(Timer.java:505)
2019-08-12 20:32:00 ERROR DBUtil:193 - DBUtil fetchlist1 error:
org.hibernate.hql.internal.ast.QuerySyntaxException: **expecting CLOSE, found '(' near line 2, column 10** [select new map( COUNT(distinct username) as DistinctUser,
COUNT(IF(searchParam='Account Sync',1,NULL)) AS 'AccountSync',
COUNT(IF(searchParam='Account Info',1,NULL)) AS 'AccountInfo',
COUNT(IF(searchParam='spectrum.net',1,NULL)) AS 'spectrum.net',
COUNT(IF(searchParam='STVA',1,NULL)) AS 'STVA',
COUNT(IF(searchParam like 'TVE%',1,NULL)) AS 'TVE',
COUNT(IF(searchParam='sbnet',1,NULL)) AS 'sbnet',
COUNT(IF(searchParam='OOH Info',1,NULL)) AS 'OOHInfo') from com.caretool.bean.dbBean.CareToolAuditBO where date(accesseddate)='2019-08-12' AND username<>'Scheduled']
at org.hibernate.hql.internal.ast.QuerySyntaxException.convert(QuerySyntaxException.java:91)
at org.hibernate.hql.internal.ast.ErrorCounter.throwQueryException(ErrorCounter.java:109)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:304)
我没有看到任何语法错误。但仍然显示错误。请帮忙。
解决方案
Remove new map and check it
List lst = DBUtil.fetchList(" COUNT(distinct username) as DistinctUser,\r\n" +
" COUNT(IF(searchParam='Account Sync',1,NULL)) AS 'AccountSync',\r\n" +
" COUNT(IF(searchParam='Account Info',1,NULL)) AS 'AccountInfo',\r\n" +
" COUNT(IF(searchParam='spectrum.net',1,NULL)) AS 'spectrum.net',\r\n" +
" COUNT(IF(searchParam='STVA',1,NULL)) AS 'STVA',\r\n" +
" COUNT(IF(searchParam like 'TVE%',1,NULL)) AS 'TVE',\r\n" +
" COUNT(IF(searchParam='sbnet',1,NULL)) AS 'sbnet',\r\n" +
" COUNT(IF(searchParam='OOH Info',1,NULL)) AS 'OOHInfo'", "CareToolAuditBO" , "date(accesseddate)='"+reportDate+"' AND username<>'Scheduled'");
推荐阅读
- php - 获取更大的 Facebook 个人资料图片 PHP SDK 问题大小
- django - Django外键约束与位于不同数据库中的模型
- facebook - 由 PHP 设置的 Facebook OG Meta 无法识别
- python - Python - ThreadPoolExecutor 阻塞。如何解除封锁
- python - 从 CSV 文件读取数据的 Python 脚本的批处理文件
- system-verilog - SystemVerilog 任务,可以强制接口模块中的任何信号
- reactjs - 如何正确访问 ComponentDidMount 方法中的 URL 参数
- d3.js - 不同层d3js的投影
- mysql - 需要数据库设计指南方面的专业知识
- ibm-midrange - 同一作业在 AS400 的不同服务器中使用不同的访问路径