Java中SQL事务的最佳实践

时间:2016-11-23 10:31:19

标签: java mysql transactions

对于特定问题,我希望使用数据库事务。 我过去从未这样做过。我的问题是,如果我可以使用普通的JDBC,或者Java提供更好的东西(框架..)来实现它? 我有什么设计模式可以看吗?

由于

1 个答案:

答案 0 :(得分:0)

您可以在互联网上找到答案,但我会为您总结一下。在交易的情况下,您基本上必须遵循以下几个步骤:

在try块中:

  • 您必须将自动提交设置为false,
  • 做你的sql查询和东西(PreparedStatement优于简单的Statement),
  • 确保你提交。

在catch区块中:

  • 回滚数据库更改(如果出现错误)。

在finally块中:

  • 检查是否为null并关闭所有PreparedStatements,
  • 检查是否为null并关闭数据库连接。

以下是一个示例:

try{
    connection = getDatabaseConnection();
    //set connection auto commit to false
    connection.setAutoCommit(false);

    PreparedStatement sqlPreparedStatement = connection.prepareStatement("sql statement here");
    //set all the values in the prepared statement
    sqlPreparedStatement.setString(1,"string");
    sqlPreparedStatement.setString(2,"anotherstring");

    sqlPreparedStatement.executeUpdate();

    PreparedStatement secondSqlStatement = connection.prepareStatement("sql statement here");
    //set all the values in the prepared statement
    secondSqlStatement.setString(1,"whatever");
    secondSqlStatement.setString(2,"sample");

    secondSqlStatement.executeUpdate();

    //commit the changes
    connection.commit();
} catch (SQLException e) {
    e.printStackTrace();//or whatever
    //rollback the changes
    connection.rollback();   
} finally {
    //close the PreparedStatement and the connection if not null
    if (sqlPreparedStatement != null) {
        sqlPreparedStatement.close();
    }
    if (secondSqlStatement != null) {
        secondSqlStatement.close();
    }
    if (connection != null) {
        connection.close();
    }
}