2012-07-17 95 views
1

我在我的代码,但对于一个特定的查询JDBCTemplate挂起调用超过3-4次后的某个15-20 attempts.I后使用JDBCTemplate没有找到我的代码中的任何错误。 下面是我的代码快照
private String getXXX(String table)
{
System.out.println("Test 1");
final List data = getJdbcTemplate().queryForList(SELECT_TBL_NME, new Object[] { table}, String.class);
System.out.println("Test 2");
ret = data.size() > 0 ? data.get(0) : null;
的JdbcTemplate挂起

 return ret; 
    } 

控制台在Test1的挂起没有任何错误,如果函数甚至第三或第四通话后得到所谓的15倍以上,有时。

+0

如何定义jdbcTemplate使用的数据源?看起来它坚持获得与数据库的连接。 – mrembisz 2012-07-17 14:46:25

+0

我的课程正在扩展JDBCDaoSupport和我的豆 Sanket 2012-07-18 07:38:19

+0

如果您从其他线程运行而不是main,请确保您正确处理错误日志记录。因为它可能是,你的查询只是默默地失败,你没有看到预期的结果 – Minutis 2016-05-12 09:37:13

回答

1

问题似乎是你没有关闭连接。

final List data = getJdbcTemplate().queryForList(SELECT_TBL_NME, new Object[] { table}, String.class); 

上面的行永远不会结束,因为JdbcTemplate正在等待从您的数据库获得连接。

所以,如果你的数据库不能给你一个连接,你的应用程序正在等待,等待,并且它什么都不做。

可能的修正:由于您使用的是Spring,请检查您是否在queryForList方法之外进行操作。

几个月前我有同样的问题,因为我在我的queryForList方法外调用ResultSet.getMetaData(),并且不释放/关闭连接。

+1

Thanx中引发任何错误的回复,但是我已经通过适当的连接关闭机制将所有JDBCtemplete调用转换为正常的JDBC并部署了。 – Sanket 2012-10-19 04:48:32

0

问题可能不在Java层。

首先测试一下:

  1. DB - 尝试使用DB工具(蟾蜍, SQLPLUS,SQL开发人员等)excecute相同的查询,并确保DB工作。问题 可能在您的DB对象(它可以被其他会话锁定)。

  2. 网络 - 同样的问题可能是由于延迟较差。确保你的网络运行良好。

  3. 尝试使用普通JDBC测试相同的查询。
+0

Thanx回复infate我用蟾蜍连接oracle 10g,并没有这样的问题在蟾蜍身边。我尝试了简单JDBC,它工作正常。但在我的项目和查询使用JDBCTemplete被解雇。所以不能转移到普通的JDBC。我仍然感到困惑,为什么它没有在JDBCTemplte – Sanket 2012-07-17 18:08:24