【发布时间】:2012-07-10 11:27:07
【问题描述】:
数据库是甲骨文。
我想将Connection.setAutoCommit 用于SQL 存储过程和函数。它会起作用吗?
对于调用程序,我使用CallableStatement
【问题讨论】:
数据库是甲骨文。
我想将Connection.setAutoCommit 用于SQL 存储过程和函数。它会起作用吗?
对于调用程序,我使用CallableStatement
【问题讨论】:
它不起作用,connection.setAutoCommit(true),在这个连接中是一个 Java 对象。你不能在存储过程中使用相同的。
我们有一个名为 autocommit 的 sql 系统变量,如果我们在编写存储过程时将其设置为 on,您的过程将自动提交您尝试执行的结果。
【讨论】:
是的,它有效。实际上自动提交是默认开启的。这个chapter 会给你一个想法,但可以节省你一些时间:
默认情况下,JDBC 的自动提交功能是开启的,这意味着每条 SQL 语句在执行时都会被提交。如果您的程序执行了多个 SQL 语句,则可以通过关闭自动提交来实现小幅性能提升。
也请阅读 CallableStatement 部分:
您可能还记得,CallableStatement 对象用于执行数据库存储过程。我将 CallableStatement 对象保存到最后,因为它们是所有 JDBC SQL 执行接口中执行最慢的对象。这听起来可能违反直觉,因为通常认为调用存储过程比使用 SQL 更快,但事实并非如此。给定一个简单的 SQL 语句和一个完成相同任务的存储过程调用,简单的 SQL 语句总是执行得更快。为什么?因为使用存储过程,您不仅有时间执行 SQL 语句,还有时间处理过程调用本身的开销。
我认为这将有助于您就应用程序的性能做出决定。
【讨论】:
一句话:是的。只要确保您没有在存储过程中嵌入事务逻辑即可。将这一切交给 JDBC 驱动程序或事务管理器。
没有什么比亲自尝试并看到更好的了。我认为这比在这里提问更好。
【讨论】: