首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL批量更新-回滚"CREATE TABLE"?

问SQL批量更新-回滚"CREATE TABLE"?
EN

Stack Overflow用户
提问于 2010-12-03 15:43:20
回答 1查看 1.2K关注 0票数 0

我有一个升级DB的方法:

代码语言:javascript
复制
private void executeUpdateBatch(String... sql) throws SQLException {
    JdbcConnection connJbdc = new JdbcConnectionImpl();
    Connection conn = connJbdc.getConnection();
    conn.setAutoCommit(false);
    Statement st = conn.createStatement();

    for(String s : sql) {
        st.addBatch(s);
    }

    try {
        // execute the batch
        int[] updateCounts = st.executeBatch();
      } catch (BatchUpdateException e) {
        int[] updateCounts = e.getUpdateCounts();
        checkUpdateCounts(updateCounts);
        try {
          conn.rollback();
        } catch (Exception e2) {
        }

        throw new SQLException(e);
      }
      // since there were no errors, commit
      conn.commit();

      st.close();
      conn.close();
}

和升级方法:

代码语言:javascript
复制
public void upgradeTo5() throws SQLException {
    executeUpdateBatch("CREATE TABLE project ("
            + "id INT(10) unsigned NOT NULL auto_increment, "
            + "title VARCHAR(255) NOT NULL, "
            + "date_from DATE NULL, date_to DATE NULL,"
            + "active BIT NOT NULL, PRIMARY KEY (id))",
            "INSERT INTO project(titlea) VALUES('test1')");
}

INSERT中存在错误,仅用于测试回滚。

现在的问题是它不能回滚CREATE TABLE project。表为InnoDB。有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-12-03 15:46:23

MySQL/InnoDB不支持。所有的DDL语句(CREATE TABLE、ALTER TABLE、CREATE INDEX、DROP ...)总是发生在事务控制之外。

这是IIRC Postgres可以更好地处理的一个弱点,但是使用MySQL时,您必须通过在回滚的情况下自己恢复更改来解决这个问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4343436

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档