对于ResultSets来说,它很容易 - 我在读完它们之后关闭它们。问题在于Connection和PreparedStatements。我不确定何时最好关闭这些资源。
对于防御性方法,在数据库上的每个复杂操作之后关闭它们似乎很好,但这意味着每次用户调用任何portlet操作时我都必须打开连接并编译预准备语句(例如每个页面reaload或ajax请求调用MVCPortlet #serviceResource)。
有没有更好的方法来管理jdbc连接?什么时候最好关闭所有这些资源?
每次调用任何portlet操作时,设置数据库连接和语句可能不是很重要吗?
答案 0 :(得分:1)
最直接的方式很可能就是这个实用类 http://docs.liferay.com/portal/6.0/javadocs/com/liferay/portal/kernel/dao/jdbc/DataAccess.html
您可以将所有已打开的资源传递给finally语句中的DataAccess.cleanUp(),实际上它只是为您执行空检查和异常处理。
如果有一个被调用的PreparedStatement也许可以在请求之间保持不变,但这是一种后期阶段的优化,可以考虑什么时候没有别的事可做。开销很小。