gpt4 book ai didi

azure - 在 Azure SQL 数据仓库中提交后事务未完成

转载 作者:行者123 更新时间:2023-12-02 23:05:11 25 4
gpt4 key购买 nike

我正在 Azure SQL 数据仓库中尝试使用 JDBC 进行事务。事务已成功处理,但事务处理后,DDL 命令失败并出现错误 无法在事务内执行操作

这就是我正在尝试做的事情。

connection.createStatement().execute("CREATE TABLE " + schema + ".transaction_table (id INT)");
connection.createStatement().execute("INSERT INTO " + schema + ".transaction_table (id) VALUES (1)");
connection.createStatement().execute("INSERT INTO " + schema + ".transaction_table (id) VALUES (2)");

// Transaction starts
connection.setAutoCommit(false);
connection.createStatement().execute("DELETE FROM " + schema + ".transaction_table WHERE id = 2");
connection.createStatement().execute("INSERT INTO " + schema + ".transaction_table (id) VALUES (10)");
connection.commit();
connection.setAutoCommit(true);
// Transaction ends

// Next DDL command to succeed, but it does not
connectiom.createStatement().execute("CREATE TABLE " + schema + ".transaction_table_new (id INT)");
// Fails with `Operation cannot be performed within a transaction`

那么,我们如何关闭 Azure SQL 数据仓库中的事务。

我尝试这样做。

try {
// This fails
connection.createStatement().execute("CREATE TABLE " + schema + ".transaction_table_new (id INT)");
} catch (SQLServerException e) {
if (e.getMessage().contains("Operation cannot be performed within a transaction")) {
// This succeeds
// Somehow the transaction was closed, may be because of the exception
connection.createStatement().execute("CREATE TABLE " + schema + ".transaction_table_new "(id INT)");
}
}

最佳答案

SQL 数据仓库期望 CREATE TABLE 语句在事务之外运行。通过将 connection.setAutoCommit 设置为 true,您将强制 Java 在事务内运行执行。我对 Java 的了解有点弱(已经有一段时间了),但是您应该能够通过简单地注释掉 setAutoCommit(true) 行来运行第二个 DDL 语句。这将使 JDBC 驱动程序仅处于执行模式,而不会在事务中运行 execute() 操作。

关于azure - 在 Azure SQL 数据仓库中提交后事务未完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48300627/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com