Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么';在Java中处理SQL连接池清理和错误处理的正确方法是什么?_Java_Mysql_Jdbc_Innodb - Fatal编程技术网

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

什么';在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

我一直在学习如何使用oraclejdbc在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.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()
时,一个行为良好的连接池实现将为您完成所有必需的清理。