2010-07-26 80 views
2

通常的建议是在不再需要JDBC资源时关闭它。这可以在一个捕获和最后完成。但是,如果一个DAO方法只能操纵一个域对象,并且一个操作需要一次性检索/创建这些操作,那该怎么办呢?要获得一个声明,然后重复关闭它会成为性能问题?如果是这样,是否应该采取单独的方法一次处理多个对象或者应该以某种方式延迟关闭?Dao方法,操作单个/多个对象并关闭资源

回答

1

你可以在DAO层的顶部添加额外的事务层,并在交易/会话的开始Connection打电话setAutoCommit(false),让DAO方法使用相同的Connection实例,然后commit()Connection当交易/会话完成/关闭。但是,您需要更改DAO方法以将Connection作为额外参数,或者将其存储为ThreadLocal(但由于可能会汇集线程,因此需要非常仔细地进行此操作)。

只要您始终使用通常在DB端编译和缓存的PreparedStatement,创建语句不应该太昂贵。

1

我认为,如果应用程序是Dao的基础,这将是没有区别的。这些资源应该关闭。如果你的工作没有任何框架(弹簧,休眠等)

java.sql.Connection应该放回池中,如果有一个池。 执行查询后应关闭ResultSet和Statement对象。

取决于您的架构,这些资源管理代码可以放在Dao类或其他类中。例如有一些专注于构建和执行SQL查询的类。资源管理代码可以在这些类中。

如果您使用某些框架,框架通常会为您执行资源管理。