什么';在Java中处理SQL连接池清理和错误处理的正确方法是什么?
我一直在学习如何使用oraclejdbc在Java中使用MySQL,并试图进入try/catch和池清理的思维模式 我想知道下面的代码是否是完美清理一切的正确方法,或者您是否注意到我的代码中的漏洞,这些漏洞要求我遗漏一些东西。作为记录,我打算使用InnoDB及其行锁定机制,这就是我关闭自动提交的原因什么';在Java中处理SQL连接池清理和错误处理的正确方法是什么?,java,mysql,jdbc,innodb,Java,Mysql,Jdbc,Innodb,我一直在学习如何使用oraclejdbc在Java中使用MySQL,并试图进入try/catch和池清理的思维模式 我想知道下面的代码是否是完美清理一切的正确方法,或者您是否注意到我的代码中的漏洞,这些漏洞要求我遗漏一些东西。作为记录,我打算使用InnoDB及其行锁定机制,这就是我关闭自动提交的原因 try { connection = getConnection(); // obtains Connection from a pool connection.setAutoCo
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.close()
将其关闭,并将其释放回池中(因此,我被告知,对此还是新手,如果我说的是废话,我深表歉意)。在此方面的任何帮助都将不胜感激
谢谢大家! 我建议不要在finally块中将autocommit设置回true-依赖autocommit设置为true的其他线程不应假定池中的连接处于此状态,而是应该在使用连接之前将autocommit设置回true(就像此线程将autocommit设置为false一样) 此外,在对连接调用close()之前,应该检查该连接的isClosed属性
除此之外,我看不出任何问题。我建议不要在finally块中将autocommit设置回true-依赖autocommit设置为true的其他线程不应假定池中的连接处于此状态,而是应该在使用连接之前将autocommit设置为true(就像此线程将自动提交设置为false一样) 此外,在对连接调用close()之前,应该检查该连接的isClosed属性
除此之外,我看不出任何问题。当您调用
connection.close()
时,一个行为良好的连接池实现将为您完成所有必需的清理。当您调用connection.close()
时,一个行为良好的连接池实现将为您完成所有必需的清理。