gpt4 book ai didi

java - 在 Java 中处理 SQL 连接池清理和错误处理的正确方法是什么?

转载 作者:行者123 更新时间:2023-11-29 00:32:27 25 4
gpt4 key购买 nike

我一直在学习如何使用 Oracle JDBC 在 Java 中使用 MySQL,我正在尝试进入 try/catch 和池清理的思维模式。

我想知道以下代码是否是完美清理所有内容的正确方法,或者您是否注意到我的代码中的漏洞需要我遗漏的内容。作为记录,我打算使用 InnoDB 及其行锁定机制,这就是我关闭自动提交的原因。

try
{
connection = getConnection(); // obtains Connection from a pool

connection.setAutoCommit(false);

// do mysql stuff here
}
catch(SQLException e)
{
if(connection != null)
{
try
{
connection.rollback(); // undo any changes
}
catch (SQLException e1)
{
this.trace(ExtensionLogLevel.ERROR, e1.getMessage());
}
}
}
finally
{
if(connection != null)
{
try
{
if(!connection.isClosed())
{
connection.close(); // free up Connection so others using the connection pool can make use of this object
}
}
catch (SQLException e)
{
this.trace(ExtensionLogLevel.ERROR, e.getMessage());
}
}
}

getConnection() 从池中返回一个 Connection 对象,然后 connection.close() 关闭它,将其释放回池中 (所以我一直被告知,对此仍然是新手,所以如果我在说废话,请见谅)。任何关于这方面的帮助将不胜感激!

谢谢!

最佳答案

我建议不要在 finally block 中将 autocommit 设置回 true - 你的其他依赖于 autocommit 被设置为 true 的线程不应该假设池中的连接处于这种状态,而是他们应该将 autocommit 设置为 true在使用连接之前(就像这个线程将自动提交设置为 false 一样)。

此外,您应该在调用 close() 之前检查连接的 isClosed 属性。

除此之外,我没有发现任何问题。

关于java - 在 Java 中处理 SQL 连接池清理和错误处理的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15914914/

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