首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JDBCTemplate挂起

JDBCTemplate挂起
EN

Stack Overflow用户
提问于 2012-07-17 21:59:57
回答 2查看 5.8K关注 0票数 3

我正在使用JDBCTemplate。对于一个特定的查询,JDBCTemplate在调用超过3-4次后挂起,有时在15-20次尝试后挂起。我在我的代码中没有发现任何bug。

代码语言:javascript
复制
private String getXXX(String table)
{
    System.out.println("Test 1");
    final List<String> data = getJdbcTemplate().queryForList(SELECT_TBL_NME,
                new Object[] { table }, String.class);
    System.out.println("Test 2");
    ret = data.size() > 0 ? data.get(0) : null;
    return ret;
}

如果函数被调用超过15次,或者有时甚至在第三次或第四次调用之后,控制台在"Test 1“处挂起,没有任何错误。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-17 21:18:28

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

代码语言:javascript
复制
final List data = getJdbcTemplate().queryForList(SELECT_TBL_NME, new Object[] { table}, String.class);

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

因此,如果你的数据库不能给你一个连接,你的应用程序正在等待,它什么也不做。

可能的修复方法:由于您使用的是Spring,请检查您没有在queryForList方法之外执行操作。

几个月前,我遇到了同样的问题,因为我在queryForList方法之外调用ResultSet.getMetaData(),但没有释放/关闭连接。

票数 3
EN

Stack Overflow用户

发布于 2012-07-17 22:29:41

问题可能不在Java层中。

首先,试着检查你的:

  1. DB -尝试使用DB工具(Toad、sqlplus、SQL Developer等)执行相同的查询。并确保数据库正常工作。问题可能出在你的数据库对象上(它可能被其他session).
  2. Network锁住了--同样的问题可能是因为糟糕的延迟。请确保您的网络工作正常。
  3. 尝试使用普通JDBC测试相同的查询。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11524127

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档