在准备好的语句中执行查询时,应用程序挂起

时间:2013-06-19 20:10:18

标签: select db2 execute hang

我正在尝试从当前日期选择超过7天的行。使用的数据库是DB2版本9。

您能否告诉我如何在查询中使用日期时间?日期表字段的类型为timestamp。

我可以手动运行查询而不会出现问题。但是,当我在准备好的声明中使用时,
 应用程序在执行查询结果时挂起= pselect.executeQuery();因此,我们需要重新启动db2实例才能清除它。  你能帮忙解决一下这个问题吗?我没有看到任何例外。如果我删除select_query部分,代码的其他部分工作正常。

try{
    String select_query = "SELECT URL_ID ,URLVAL FROM URL_TAB WHERE " +
                  "UPDATED_DATE < TIMESTAMP(CURRENT_DATE - 7 DAYS, '00.00.00')";
    System.out.println("select_query=" + select_query);

    conn = JDBCDataObjectFactoryManager
            .getConnection("JDBCConnectionFactory-SDE");

    pselect = conn.prepareStatement(select_query);
    System.out.println("pselect=" + pselect);

try{    
    System.out.println("inside try");   
    result = pselect.executeQuery();        
    System.out.println("result=" + result);
}catch(Exception e){ 
    System.out.println("inside catch"); 

    System.out.println("error message==============>"+e.getMessage());

}

if ((result != null) && (result.next())) {
            System.out.println("3 >>>>>>>>>>>>>>>>>>>>>>>>>");

             url_id = result.getInt(1);
             url = result.getString(2);
}//end if

1 个答案:

答案 0 :(得分:1)

有两种可能性:查询处于锁定等待状态,或者运行时间过长,看起来是挂起的。

检查LOCKWAIT数据库配置参数的值是什么 - 默认值为-1,表示无穷大,您通常希望将其设置为更合理的值,通常为30或60秒。如果是导致应用程序“挂起”的锁定等待,则会出现异常,这将有助于您进一步调试。

如果问题是由较差的查询性能引起的,那么您需要与DBA一起找出根本原因并解决它。