1
13
我一点也不同意这种做法。 首先,dao应该由拥有工作单元和事务的服务提供它们的连接信息。
第四,准备好的声明应该只是内部执行的一部分。如果他们从你的刀里漏出来,你就做错了。 第五,将事先准备好的语句从对象中传递出去,使得关闭和清理对象的责任远不明确。你的刀很快就会被资源泄漏致死。 这里有一个通用DAO的接口。您会注意到,这都是CRUD操作,没有提到连接或来自的任何接口java.sql 包裹:
你可以做很多事。这是一个更好的抽象。这个
|
2
3
如果您将相同的连接返回给所有人,您可能仍会保存同步,因为连接中没有更改的状态(在当前代码中)。但你应该避免这种做法。请考虑使用连接池。 只有 |
3
3
JDBC连接类不能保证线程安全。如果你的Database.getInstance().getCon()方法总是返回相同的连接,那么您将遇到问题。但是,如果它使用的是一个池,那么每次调用getInstance().getCon()都会返回一个不同的连接,就可以了。 也就是说,如果每次调用getCon()都返回不同的连接,那么如果希望两个Prepared语句调用使用相同的连接(和相同的事务),getPreparedStatement()将不起作用。 我喜欢Spring的JDBCTemplate类作为DAO类的基础。 |
4
2
|
5
2
看看Spring是怎么做到的,他们已经搞清楚了所有这些东西,没有必要再发明了。查看与Spring的完整发行版捆绑在一起的petclinic示例代码,或者(对于非Spring方法)阅读Bauer/King Hibernate书籍中的DAO章节。 当然DAO不应该负责获取数据库连接,因为您需要在同一事务中对多个DAO调用进行分组。Spring的做法是,服务层将其事务方法包装在拦截器中,拦截器从数据源提取连接并将其放入threadlocal变量中,DAOs可以在其中找到它。 吃掉SQLException并返回null是不好的。正如duffymo指出的那样,让PreparedStatement被传递而不保证它会被关闭是非常糟糕的。而且,没有人应该再使用原始JDBC了,Ibatis或springjdbc是更好的选择。 |
6
0
连接只是一个接口。它不是线程安全的。JDBC驱动程序也不是线程安全的。 |
7
-1
|
TheItalianJobless · 在使用JDBC的DAO类中,这两种方法中,哪一种是处理关闭ResultSet、PreparedStatement和Connection的try捕捉的最佳方法? 7 年前 |
devuser · 具有相同标识符值的不同对象已与会话关联 8 年前 |
Wayne · 如何在DAO数据库中正确使用Seek 8 年前 |
Bobort · 如何在Access中删除表上的主键? 9 年前 |