首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Oracle -如何正确执行事务?

Oracle -如何正确执行事务?
EN

Stack Overflow用户
提问于 2012-08-15 08:39:21
回答 4查看 2.3K关注 0票数 0

我的发言:

代码语言:javascript
运行
复制
statement.addBatch("START TRANSACTION;" +
                "UPDATE FIRST_TABLE SET FIRST_FIELD = 1;" +
                "UPDATE SECOND_TABLE SET SECOND_FIELD = 2;" +
                "UPDATE THIRD_TABLE SET THIRD_FIELD = 3;" +
                "COMMIT;");

异常抛出下一行:

代码语言:javascript
运行
复制
statement.executeBatch();

如果我使用execute方法,也会发生同样的情况。

代码语言:javascript
运行
复制
statement.execute(myTransaction);

例外情况:

代码语言:javascript
运行
复制
java.sql.BatchUpdateException: ORA-00900: invalid SQL statement

我用甲骨文。如果在命令行或SQL中执行此语句,则不会有任何异常。在这种情况下它能正常工作。只有在java代码中才有这个异常。怎么啦?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-08-15 08:45:47

试试看

代码语言:javascript
运行
复制
connection.setAutoCommit(false);
statement.addBatch("UPDATE FIRST_TABLE SET FIRST_FIELD = 1");
statement.addBatch("UPDATE SECOND_TABLE SET SECOND_FIELD = 2");
statement.addBatch("UPDATE THIRD_TABLE SET THIRD_FIELD = 3");
int [] counts = statement.executeBatch();
connection.commit();
票数 3
EN

Stack Overflow用户

发布于 2012-08-15 08:45:29

尝试在分隔的addBatch()中添加每个更新语句

票数 1
EN

Stack Overflow用户

发布于 2012-08-15 08:43:11

通常,您将使用连接的setAutoCommit()方法启动事务,运行语句,最后适当地调用commit()或rollback()。这是一种与数据库无关的在事务中工作的方法。不确定,为什么要为相同的对象构造SQL!你能详细说明一下用例吗?

代码语言:javascript
运行
复制
Connection con = dataSource.getConnection();
try {
    con.setAutoCommit(false);
    Statement stmt = con.prepareStatement("<your update statement with placeholders for  parameters");
    stmt.set(1, <Value1>);
    stmt.set(2, <Value2>);
    stmt.execute();
    con.commit();
}
catch (SQLException sqle) {
    // Handle the exception
    con.rollback();
}
finally {
    con.close();
}

注意:在获得连接和关闭连接时,在上面的代码中有许多需要处理的角落情况,为了使这看起来现在看起来很简单而忽略了它!

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

https://stackoverflow.com/questions/11966304

复制
相关文章

相似问题

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