这可能是一个愚蠢的问题,但请告诉我,因为我对 Java 数据库知之甚少。我正在开发一个组件,我想为其提供一个选项给用户,以便可以将自动提交设置为 false。这是为了提高性能。我正在使用 JDK7u25 连接到 Sybase ASE。
我可以在 java.sql.Connection 上调用 setAutoCommit(false) 方法。但是,当我这样做并调用一个将记录插入表中的简单存储过程时,出现以下错误。我不是从我的存储过程创建表。
com.sybase.jdbc3.jdbc.SybSQLException: The 'CREATE TABLE' command is not allowed within a multi-statement transaction in the 'tempdb' database.
我在 Sybase 文档页面上阅读并了解到这是错误代码 2762 的已知问题。这可以通过在数据库上发出以下命令来解决:
sp_dboption dbName, "ddl in tran", true.
但是,当我在 Interactive SQL 中执行此命令并尝试运行我的程序时,我仍然收到此错误。我应该从我的 java 程序中显式运行这个命令吗?
另一方面:我也有以下问题:
Space available in the log segment has fallen critically low in database 'myDB'. All future modifications to this database will be %S_MSG until the log is successfully dumped and space becomes available.
The transaction log in database myDB is almost full. Your transaction is being suspended until space is made available in the log.
我通过在 Interactive SQL 中发出以下命令来解决此问题:
sp_dboption myDB, "trunc log", true
如果我不必通过我的 java 程序显式执行此命令并且它有效,那么为什么应该是(如果必须)通过我的 java 程序执行带有“ddl in tran”的 sp_dboption 为 true 的原因?是因为 java 程序创建的会话与在 Interactive SQL 中使用的会话不同吗?