java - PreparedStatements中commit方法的使用

标签 java sql-server prepared-statement

使用 Java PreparedStatements 时,提交会使对数据库的任何更改永久化。我想了解的是这意味着什么。特别是,我可以在提交之前从插入语句中读取生成的 key 吗?我可以在执行提交之前使用从数据库中检索到的值在我的插入语句后跟一个更新语句,如以下代码片段所示吗?或者我应该在第一个插入语句之后进行提交,然后在更新语句之后进行第二次提交。

String insertString = "insert into charges(acct,servicedate,cdmcode,price,quantity,revenuecode,chargeid,id,mod) values (?,?,?,?,?,?,?,?,?)";
    String updateString = "update charges set chargeid = ? where indx = ?";
    try {
        connection.setAutoCommit(false);
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    insertcharge = connection.prepareStatement(insertString,Statement.RETURN_GENERATED_KEYS);
    insertcharge.setString(1, newacct);
    insertcharge.setString(2, servicedate);
    insertcharge.setString(3, cdmcode);
    insertcharge.setString(4, price);
    insertcharge.setString(5, quantity);
    insertcharge.setString(6, revenuecode);
    insertcharge.setString(7, "0");
    insertcharge.setString(8, id);
    insertcharge.setString(9, mods);
    insertcharge.executeUpdate();
    ResultSet rs = insertcharge.getGeneratedKeys();
    int thekey = 0;
    if (rs.next()){
        thekey = rs.getInt(1);
    }
    insertcharge = connection.prepareStatement(updateString);
    insertcharge.setInt(1, thekey);
    insertcharge.setInt(2, thekey);
    insertcharge.executeUpdate();
    connection.commit();

最佳答案

当您禁用自动提交时,您的每个 SQL 语句都在一个事务中执行,然后在您调用 commit 时作为一个原子单元提交。如果任何语句在提交中失败,则整个事务失败,您可以将其全部回滚。

如果您希望您的代码以这种方式运行,那么您应该在一个事务中完成所有操作。

如果你想拥有多个事务,以便每个 block 彼此独立提交,你也可以这样做。

您使用一个还是多个事务会受到您的业务逻辑/需求的影响。

这里有一个例子展示了如何回滚它们 http://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html

关于java - PreparedStatements中commit方法的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20848878/

相关文章:

php - MySQL 查询按月返回行数

Java如何将数组值从一种方法传递到另一种方法

sql - SQL Server 2008R2 Management Studio 中的角色和系统角色变灰

php - PDO、准备好的语句和 SQL 注入(inject)

sql - 比较 SQL Server 2008 中删除和插入的表

sql-server - 如何从 XSD 架构构建数据库并导入 XML 数据

java - 如何使用MySQL通过preparedStatement将数据从一张表复制到另一张表?

java - 转向 SD 兼容性

java - Spring Boot 中的标准 API

java - Play Framework 2.1.0 - 使用Ebean查询现有数据库表