gpt4 book ai didi

sql-server - JDBC 提交(): what happens behind the scenes?

转载 作者:行者123 更新时间:2023-12-03 15:49:24 24 4
gpt4 key购买 nike

我正在帮助查找死锁。环境: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

当我们寻找错误(原谅:软件缺陷)时,我想知道:驱动程序是如何工作的?我的猜测:无论我在 (3) 和 (7) 之间做什么,都会由驱动程序/DBMS 排队。只有当我 connection.commit() 时,DBMS 开始一个新事务,获取操作所需的每个锁(我希望它足够聪明,可以锁定尽可能小的对象集),执行语句和释放锁,从而关闭事务。

还是我一执行准备好的语句,DBMS 就锁定了表?

编辑:我想了解的是,如果“commit()”转换为一组以“begin trans/lock table”开头并以“commit/unlock table”结尾的 SQL 语句,或者如果任何 Java executeStatement() 立即获取锁。

TIA

最佳答案

如果你对内部细节感兴趣,在 SQLServer JDBC 实现的 connection.commit 上

发出以下命令

IF @@TRANCOUNT > 0 COMMIT TRAN

@@TRANCOUNT = 0 -- 没有未结交易@@TRANCOUNT = 1 -- 1 个打开的事务@@TRANCOUNT =10 -- 10 笔交易

将自动提交设置为 false,

set implicit_transactions on

这些是 MS SQLServer 特定的命令。

关于sql-server - JDBC 提交(): what happens behind the scenes?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5248649/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com