【问题标题】:Does Connection.setAutoCommit(true) work for SQL stored procedures and functions?Connection.setAutoCommit(true) 是否适用于 SQL 存储过程和函数?
【发布时间】:2012-07-10 11:27:07
【问题描述】:

数据库是甲骨文。

我想将Connection.setAutoCommit 用于SQL 存储过程和函数。它会起作用吗?

对于调用程序,我使用CallableStatement

【问题讨论】:

    标签: java sql oracle jdbc


    【解决方案1】:

    它不起作用,connection.setAutoCommit(true),在这个连接中是一个 Java 对象。你不能在存储过程中使用相同的。

    我们有一个名为 autocommit 的 sql 系统变量,如果我们在编写存储过程时将其设置为 on,您的过程将自动提交您尝试执行的结果。

    【讨论】:

      【解决方案2】:

      是的,它有效。实际上自动提交是默认开启的。这个chapter 会给你一个想法,但可以节省你一些时间:

      默认情况下,JDBC 的自动提交功能是开启的,这意味着每条 SQL 语句在执行时都会被提交。如果您的程序执行了多个 SQL 语句,则可以通过关闭自动提交来实现小幅性能提升。

      也请阅读 CallableStatement 部分:

      您可能还记得,CallableStatement 对象用于执行数据库存储过程。我将 CallableStatement 对象保存到最后,因为它们是所有 JDBC SQL 执行接口中执行最慢的对象。这听起来可能违反直觉,因为通常认为调用存储过程比使用 SQL 更快,但事实并非如此。给定一个简单的 SQL 语句和一个完成相同任务的存储过程调用,简单的 SQL 语句总是执行得更快。为什么?因为使用存储过程,您不仅有时间执行 SQL 语句,还有时间处理过程调用本身的开销。

      我认为这将有助于您就应用程序的性能做出决定。

      【讨论】:

        【解决方案3】:

        一句话:是的。只要确保您没有在存储过程中嵌入事务逻辑即可。将这一切交给 JDBC 驱动程序或事务管理器。

        没有什么比亲自尝试并看到更好的了。我认为这比在这里提问更好。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-05-30
          • 1970-01-01
          • 2010-09-08
          • 2011-09-16
          • 2016-10-16
          • 1970-01-01
          • 2019-01-06
          • 2019-10-07
          相关资源
          最近更新 更多