dcp*_*dcp 7 java connection jdbc
假设我有一个创建数据库连接的常用方法:
Connection getConnection() throws SQLException {
Connection con = ... // create the connection
con.setAutoCommit(false);
return con;
}
Run Code Online (Sandbox Code Playgroud)
我把这个setAutoCommit(false)
调用放在这里,这样这个方法的调用者就不必担心设置它了.但是,如果调用者执行的操作只是读取数据,这是不好的做法吗?有没有额外的开销?
我个人认为最好将逻辑集中在一个地方,这样调用者就不必设置自动提交,这样可以避免代码冗余.我只是想确保它不会给只读操作带来任何不必要的开销.
Autocommit对SELECT
查询没有任何价值.但是,关闭自动提交确实是一种更常见的做法.通常,您希望在事务中触发查询.默认情况下,大多数连接池也将其关闭.但是,我建议将它作为连接管理器的配置设置和/或使用布尔参数重载方法,这样你至少可以对它进行任何控制.
我在这里调用setAutoCommit(false)调用,以便此方法的调用者不必担心设置它.
这是很好的IMO,我个人认为永远不应该在应用程序中启用自动提交模式.所以我的建议是关闭自动提交.
但是,如果调用者执行的操作只是读取数据,这是不好的做法吗?有没有额外的开销?
从严格的性能角度来看,它为每个具有开销的SQL语句开始和结束数据库事务,并可能降低应用程序的性能.
顺便说一句,SELECT语句受setAutoCommit(boolean)
javadoc的影响:
将此连接的自动提交模式设置为给定状态.如果连接处于自动提交模式,则其所有SQL语句将作为单个事务执行并提交.否则,其SQL语句将分组为通过调用方法提交或方法回滚来终止的事务.默认情况下,新连接处于自动提交模式.
语句完成时发生提交.语句完成的时间取决于SQL语句的类型:
- 对于DML语句,例如Insert,Update或Delete,以及DDL语句,语句在完成执行后立即完成.
- 对于Select语句,关闭关联结果集时语句完成.
- 对于CallableStatement对象或返回多个结果的语句,当关闭所有关联的结果集并且已检索到所有更新计数和输出参数时,语句将完成.
归档时间: |
|
查看次数: |
11212 次 |
最近记录: |