gpt4 book ai didi

java - Spring Jdbctemplate 与 PostgreSQL : connection already closed when accesing java. sql.Array

转载 作者:太空宇宙 更新时间:2023-11-04 07:03:35 42 4
gpt4 key购买 nike

我正在将 Spring 的 JdbcTemplate 与 PostgreSQL 一起使用。当我的应用程序执行以下代码行时,会抛出错误。该方法包含在到达该特定行之前链接成一行的其他只读查询执行。

在从映射中提取 java.sql.Array 之前,jdbcTemplate 似乎关闭了连接。

public void writeGeoRelation(Long id){

...

List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);
for (Map<String, Object> map : list) {
Long[] arr = (Long[]) ((Array) map.get("foo")).getArray(); //Erroneous line
}
}

这是堆栈跟踪:

org.postgresql.util.PSQLException: This connection has been closed.
at org.postgresql.jdbc2.AbstractJdbc2Connection.checkClosed(AbstractJdbc2Connection.java:822)
at org.postgresql.jdbc3.AbstractJdbc3Connection.prepareStatement(AbstractJdbc3Connection.java:273)
at org.postgresql.jdbc2.AbstractJdbc2Connection.prepareStatement(AbstractJdbc2Connection.java:301)
at org.postgresql.jdbc2.TypeInfoCache.getArrayDelimiter(TypeInfoCache.java:337)
at org.postgresql.jdbc2.AbstractJdbc2Array.buildArrayList(AbstractJdbc2Array.java:372)
at org.postgresql.jdbc2.AbstractJdbc2Array.getArrayImpl(AbstractJdbc2Array.java:160)
at org.postgresql.jdbc2.AbstractJdbc2Array.getArray(AbstractJdbc2Array.java:128)
at com.company.geo.director.GeoDirector.writeGeoRelation(GeoDirector.java:438)

你知道我如何强制连接保持开放而不回归到普通的 Jdbc 吗?我真的很想继续使用 Spring Jdbc。

最佳答案

您可以考虑在调用 DAODAO 或服务中的方法上使用 @Transactional

事务确保操作序列的原子性。这恰恰意味着,要么一切成功,要么在出现异常的情况下回滚所有查询。当事务失败时,Spring 会关闭连接并释放资源。如果没有事务,则没有人保证连接何时关闭(一次调用从数据库成功返回后也可能会关闭,并且对于下一次调用可能会获取另一个连接。

既然你说问题已经解决了,我就不再写到这里了,更多关于Spring的内容请引用我的博客:TechieMe

关于java - Spring Jdbctemplate 与 PostgreSQL : connection already closed when accesing java. sql.Array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21752386/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com