2013-06-19 45 views
0

我想从当前日期中选择比7天早的行。使用的数据库是DB2版本9.在准备好的语句中执行查询时应用程序挂起

您能告诉我在查询中我可以如何使用datetime吗?日期表字段的类型是时间戳。

我能够手动运行查询没有问题。但是,当我在准备好的语句中使用时,
执行查询结果时应用程序挂起= 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

有两种可能性:要么查询是在锁等待,或者这么长时间,它似乎已被挂起运行的。

检查LOCKWAIT数据库配置参数的值是多少 - 默认情况下它是-1,这意味着无穷大,并且通常希望将其设置为更合理的值,通常为30或60秒。如果是导致应用程序“挂起”的锁定等待,您将得到一个异常,这将有助于您进一步调试。

如果问题是由较差的查询性能引起的,则需要与DBA一起找出根源并解决问题。

+0

表中只有1个匹配的行和4条记录。所以我相信这可能不是性能问题。我有时看到异常可能是2/10次。因此很难追查什么是根本原因。 DBA表示这是应用程序错误。 – smiley

+0

我将检查LOCKWAIT参数值并将其设置为60秒,看看会发生什么。谢谢胡克西奥。 – smiley

+0

如果从命令行运行该查询,会发生什么情况?您也可以尝试查看JDBC跟踪 - [请参阅此处如何打开它](http://publib.boulder.ibm.com/infocenter/db2luw/v9r5/topic/com.ibm.db2.luw.admin .trb.doc/doc/t0020709.html) - 获取更多线索。 – mustaccio

相关问题