Man*_*zzi 2 sql-server transactions jdbc
我正在帮助解决僵局.环境:Tomcat 5.5,Java 5,Microsoft SQL Server 2008,jTDS(替换旧驱动程序).我们有一个传统的连接池.
数据库代码始终遵循此方案:
connection = connectionPool.getConnection(); // 1
boolean previousAutoCommitStatus = connection.getAutoCommit(); // 2
connection.setAutoCommit(false); // 3
// ... use the connection ...
// execute prepared statement 4
// execute prepared statement 5
// execute prepared statement 6
connection.commit(); // 7
connection.setAutoCommit(previousAutoCommitStatus); // 8
connectionPool.releaseConnection(connection); // 9
Run Code Online (Sandbox Code Playgroud)
虽然我们捕获了这个bug(原谅:软件缺陷)但我想知道:驱动程序是如何工作的?我的猜测:无论我在(3)和(7)之间做什么都由驱动程序/ DBMS排队.只有当我connection.commit()在DBMS开始一个新事务时,才获取操作所需的每个锁(我希望它足够智能来锁定较小的可能对象集),执行语句并释放锁,从而关闭事务.
或者,只要我执行准备好的语句,DBMS就会锁定表格吗?
编辑:我想要理解的是,"commit()"是否转换为一组以"begin trans/lock table"开头并以"commit/unlock table"结尾的SQL语句,或者是否有任何Java executeStatement()立即获取锁.
TIA
如果您对内部详细信息感兴趣,请参阅SQLServer JDBC实现的connection.com
发出以下命令
IF @@TRANCOUNT > 0 COMMIT TRAN
Run Code Online (Sandbox Code Playgroud)
@@ TRANCOUNT = 0 - 没有开放交易@@ TRANCOUNT = 1 - 1开放交易@@ TRANCOUNT = 10 - 10开放交易
在将autocommit设置为false时,
set implicit_transactions on
Run Code Online (Sandbox Code Playgroud)
这些是MS SQLServer特定的命令.
| 归档时间: |
|
| 查看次数: |
8861 次 |
| 最近记录: |