Java JDBCTemplate挂起
我正在使用JDBCTemplate。对于一个特定的查询,JDBCTemplate在调用超过3-4次后挂起,有时在尝试15-20次后挂起。我在代码中没有发现任何错误Java JDBCTemplate挂起,java,spring,spring-jdbc,Java,Spring,Spring Jdbc,我正在使用JDBCTemplate。对于一个特定的查询,JDBCTemplate在调用超过3-4次后挂起,有时在尝试15-20次后挂起。我在代码中没有发现任何错误 private String getXXX(String table) { System.out.println("Test 1"); final List<String> data = getJdbcTemplate().queryForList(SELECT_TBL_NME,
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;
}
私有字符串getXXX(字符串表)
{
系统输出打印项次(“测试1”);
最终列表数据=getJdbcTemplate().queryForList(选择,
新对象[]{table},String.class);
系统输出打印项次(“测试2”);
ret=data.size()>0?data.get(0):null;
返回ret;
}
如果函数被调用超过15次,或者有时甚至在第三次或第四次调用之后,控制台在“测试1”处挂起,而没有任何错误。问题可能不在Java层 首先,请检查您的:
问题似乎是您没有关闭连接
final List data = getJdbcTemplate().queryForList(SELECT_TBL_NME, new Object[] { table}, String.class);
上面这一行永远不会结束,因为JdbcTemplate正在等待从db获得连接
所以,如果您的数据库不能给您一个连接,您的应用程序正在等待,等待,等待,它不做任何事情的时间
可能的修复方法:由于您正在使用Spring,请检查您没有在queryForList
方法之外执行操作
几个月前我遇到了同样的问题,因为我在
queryForList
方法之外调用ResultSet.getMetaData(),而这并没有释放/关闭连接。如何定义jdbcTemplate使用的数据源?看起来它无法连接到数据库。我的类正在扩展JDBCDAO支持,在我的bean中
如果您从main以外的其他线程运行它,请确保正确处理错误日志记录。因为可能是这样的,您的查询只是默默地失败了,并且您没有看到预期的结果。对于reply infate,我正在使用Toad连接oracle 10g,在Toad端没有这样的问题。我试过简单的JDBC,它很管用。但是在我的项目中,使用JDBCTemplete会触发查询。因此,我们不能转向普通的JDBC。我仍然感到困惑,为什么它没有在JDBCTemplateTanx中抛出任何错误以进行回复,但我已经将所有JDBCTemplate调用转换为具有适当连接关闭机制的普通JDBC并进行了部署。