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;
}
...全文
2475 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
  • 打赏
  • 举报
回复
贴完整的错误信息
源码直接下载地址: https://pan.quark.cn/s/854bd57df23a 在金融行业中,房产购置贷款是众多人在购置不动产时必须进行的一项财务规划。Matlab作为一种功能强大的数学及数据分析平台,经常被应用于各类复杂的运算,其中包括住房贷款的计算。本文将详细研究运用Matlab开发住房贷款计算程序的相关知识要点,以协助读者掌握如何借助编程技术处理实际的信贷问题。 1. **信贷种类** - **商业信贷**:此类贷款通常由金融机构提供,其利率会随市场行情变化,借款人可选用固定利率或浮动利率方案。 - **公积金信贷**:该类贷款获得政府机构的支持,利率一般低于商业信贷,但设有最高贷款金额的限制。 2. **偿付模式** - **等额本金偿付**:每月支付相同数量的本金,利息部分逐月减少,因此整体还款总额会逐步降低。 - **等额本息偿付**:每月支付固定金额的本金与利息组合,利息部分随本金的逐月减少而递减。 3. **住房贷款计算公式** - **等额本息偿付**:每月还款额=贷款本金×[月利率×(1+月利率)^(贷款期数)]÷[(1+月利率)^(贷款期数)-1]。 - **等额本金偿付**:每月应还本金=贷款总额/贷款期数,每月利息=(贷款余额-累计已还本金)×月利率。 4. **Matlab编程基础** - **变量设定**:在Matlab环境中,首要任务是设定贷款数额、年化利率、贷款时长等核心参数。 - **循环控制结构**:借助for循环来模拟每个还款周期的过程,进行本金与利息的计算。 - **函数构建**:将住房贷款的计算逻辑封装为函数,便于重复使用和测试不同条件下的结果。 5. **Matlab代码编写** - **等额本息函数实现**...

51,407

社区成员

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

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