Hibernate查询偶尔出现could not execute query,急急急

twx211553 2018-05-06 07:22:51
Hibernate项目,数据库SqlServer2008 R2,阿里云服务器Tomcat。
业务:通过Quartz每3分钟定时查询任务表中的数据进行业务处理。
异常:运行一段时间后偶尔会出现无法查询任务表的异常:org.hibernate.exception.SQLGrammarException: could not execute query,出现异常后下一次任务查询又是可以的。
1,sql语句本身是没问题的,要不然也不会偶尔出现异常。2,业务处理是运行时长大概10秒就运行完毕了,简单的业务处理。
怀疑是数据库连接池的问题,麻烦高手指点一下。
以下是xml配置。
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<!-- Generated by MyEclipse Hibernate Tools. -->
<hibernate-configuration>

<session-factory>
<property name="dialect">
org.hibernate.dialect.SQLServerDialect
</property>
<property name="connection.url">jdbc:sqlserver://xx.xxx.xxx.xxx:1433;DatabaseName=testAAA;</property>
<property name="connection.username">sa</property>
<property name="connection.password">123</property>
<property name="connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
<property name="myeclipse.connection.profile">JuDingDB</property>
<property name="hibernate.show_sql">false</property>
<!--c3p0连接池配置-->
<!--定义在从数据库获取新连接失败后重复尝试的次数。Default: 30 -->
<property name="acquireRetryAttempts">30</property>
<!-- 连接池中最大连接数 -->
<property name="hibernate.c3p0.max_size">100</property>
<!-- 连接池中最小连接数 -->
<property name="hibernate.c3p0.min_size">10</property>
<!-- 最大的PreparedStatement的数量 -->
<property name="hibernate.c3p0.max_statements">100</property>
<!-- 获得连接的超时时间,如果超过这个时间,会抛出异常,单位毫秒 -->
<property name="hibernate.c3p0.timeout">8000</property>
<!-- 每隔120秒检查连接池里的空闲连接 ,单位是秒-->
<property name="hibernate.c3p0.idle_test_period">120</property>
<!-- 当连接池里面的连接用完的时候,C3P0一下获取的新的连接数 -->
<property name="hibernate.c3p0.acquire_increment">5</property>

<!-- 实体类映射 -->
<mapping resource="com/juding/entity/TaskRunTime.hbm.xml" />
</session-factory>

</hibernate-configuration>


以下是Java出错代码。偶尔会出现获取所有调度信息异常:org.hibernate.exception.SQLGrammarException: could not execute query
/**
* 获取所有的任务列表,参数key无输入的情况下则查询所有任务列表
* @param key
* @return list
*/
public List findLastRunTimeByKey(Boolean isRun,String key){
// TODO Auto-generated method stub
Session s=null;
Criteria c=null;
List list= new ArrayList();
try{
s=HibernateUtil.getSessionByDB("juding");
c=s.createCriteria(TaskRunTime.class);
//eq是等于,gt是大于,lt是小于,or是或
c.add(Restrictions.eq("isRun",isRun));
if(key!=null){
c.add(Restrictions.eq("taskId",key));
//给同步时间减去1分钟
TaskRunTime taskRunTime = (TaskRunTime)c.list().get(0);
list.add(taskRunTime);
}else{
list=c.list();
}
}catch(Exception e) {
System.out.println("获取所有调度信息异常:"+e.toString());
}finally{
if(s!=null)
s.close();
}
return list;
}
...全文
2144 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
tianfang 2018-05-07
  • 打赏
  • 举报
回复
换连接池试试,c3p0太老了 阿里的 Druid,HikariCP ( https://github.com/brettwooldridge/HikariCP)都可以试试
twx211553 2018-05-07
  • 打赏
  • 举报
回复
引用 1 楼 tianfang 的回复:
贴完整的错误信息
错误被catch了。日志记录的是:获取所有调度信息异常:org.hibernate.exception.SQLGrammarException: could not execute query
/**
     * 获取所有的任务列表,参数key无输入的情况下则查询所有任务列表
     * @param key
     * @return list
     */
    public List findLastRunTimeByKey(Boolean isRun,String key){
        // TODO Auto-generated method stub
        Session s=null;
        Criteria c=null;
        List list= new ArrayList();
        try{
            s=HibernateUtil.getSessionByDB("juding");
            c=s.createCriteria(TaskRunTime.class);
            //eq是等于,gt是大于,lt是小于,or是或
            c.add(Restrictions.eq("isRun",isRun));
            if(key!=null){
                c.add(Restrictions.eq("taskId",key));
                TaskRunTime taskRunTime = (TaskRunTime)c.list().get(0);
                list.add(taskRunTime);
            }else{
                list=c.list();
            }
        }catch(Exception e) {
            System.out.println("获取所有调度信息异常:"+e.toString());
        }finally{
            if(s!=null)
            s.close();
        }
        return list;
    }
tianfang 2018-05-07
  • 打赏
  • 举报
回复
输出错误信息的时候,把参数 isRun和key也输出一下,key中有特殊字段也可能会出问题
tianfang 2018-05-06
  • 打赏
  • 举报
回复
贴完整的错误信息

50,559

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧