- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
setAutoCommit
为 false 并且在关闭连接之前抛出异常,但它仍然提交事务。这不是奇怪的行为吗?
public static void insertEmployee(){
String query1 = "INSERT INTO EMPLOYEE VALUES(80, 'from code')";
String query2 = "INSERT INTO EMPLOYEE VALUES(81, 'from code')";
Connection connection = null;
Statement statement = null;
try {
connection = DriverManager.getConnection(url, username, password);
connection.setAutoCommit(false);
statement = connection.createStatement();
statement.executeUpdate(query1);
ResultSet resultSet = statement.executeQuery(query2);
while(resultSet.next()) //this code throws the exception kept like this intentionally
{
int empNo = resultSet.getInt("EMPLOYEE_ID");
String eName = resultSet.getString("EMPLOYEE_NAME");
System.out.println("eName = " + eName);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
statement.close();
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
最佳答案
将自动提交设置为 false
意味着语句的更改不会在执行后立即提交。但是,它不会 [必然] 影响 close()
的行为,它可以选择提交或回滚未提交的数据。作为the documentation状态:
It is strongly recommended that an application explicitly commits or rolls back an active transaction prior to calling the close method. If the close method is called and there is an active transaction, the results are implementation-defined.
换句话说,无论自动提交标志如何,您都应该始终在 Connection
对象之前显式 commit()
或 rollback()
close()
关闭它:
try {
// DML operations here
// Explicitly commit if we got this far
connection.commit();
} catch (SQLException e) {
// If an exception occurred, explicitly rollback:
connection.rollback();
// Log somehow
e.printStackTrace();
} finally {
// Close resources
}
关于java - 发生异常后,即使 AutoCommit 为 false,关闭连接似乎也会提交事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32736040/
我试图通过 mysql 查询(无连接)从表中删除超过 200 万条记录。该表大约有 8000 万条记录。 我使用了set autocommit=0;并且需要很长时间才能完成。如果我使用 autocom
1 MySQL的autocommit设置 MySQL默认是开启自动提交的,即每一条DML(增删改)语句都会被作为一个单独的事务进行隐式提交。如果修改为关闭状态,则执行DML语句之后要手动提交 才能
我正在使用我公司许多人共享的服务器。服务器上有多个数据库,我不控制服务器。 系统管理员已将自动提交设置为 false 的默认设置。这在尝试使用 PHPMYADMIN 时给我带来了麻烦。 我能否安全地将
我的应用程序是基于 RoR 和 MySQL 的。我想将自动提交从打开变为关闭,并且我知道如何在 MySQL 中执行此操作。但是我是否需要停止并重新启动 Rails 服务器以确保此更改在我的应用程序中生
我在项目中使用 pg_connect 和 pg_query。但是我真的不确定 pg_connect 是否使用 AutoCommit 模式? 这个问题很重要,因为我需要在事务下写一些 block ,如果
试图理解事务...我正在使用 Spring 的 JdbcTemplate和@Transactional方法中的注释。尽管事务在方法执行期间处于 Activity 状态(如日志和 Transaction
我的代码有什么问题吗?我正在使用 mysql 连接器来处理 mysql 数据库。在构建阶段一切看起来都很酷,但是当我运行我的代码时,我收到此错误: ERROR: SQLException in /pr
我的代码有什么问题?我正在使用 mysql 连接器来处理 mysql 数据库。在构建阶段一切看起来都很酷但是当我运行我的代码时我得到这个错误: ERROR: SQLException in /prog
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 9 年前。 Improve th
我正在审查另一位开发人员的代码。他有一个在 MySQL 事务开始时显式添加 set autocommit=0 的提交。这会导致 session 中其他非事务性查询出现问题。 在事务中添加 set au
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我需要在 Linux 中使用 erlang odbc 模块禁用 oracle 的自动提交。我创建了代码连接: {ok, Con} = odbc:connect("DSN=MyDSN", [{auto_
我一直想知道为什么 JDBC API 提供了自动提交模式(java.sql.Connection.setAutocommit())。这似乎是一种有吸引力的滋扰,只会引诱人们陷入困境。我的理论是,它只是
我正在使用 EJB 开发应用程序,当我在数据库上进行事务时,出现以下错误: Grave: RAR5031:System Exception javax.resource.spi.LocalTransa
我正在处理一个仅使用“autoCommit=true”创建连接的连接池。 但是,对于我的特定用例,我需要“autoCommit=false”以便我可以在 JDBC 语句上设置“获取大小”属性。 我的初
我正在使用 DB2。我为它创建了 ConnectionPool。一些需要在“aumoCommit = false”模式下执行的查询。 Connection con = ConnectionPool.g
我想使用 cron 运行 SSH 命令,我想通过添加 autocommit=0 来扩展此 cron,以便禁用自动提交。 我怎样才能做到这一点? 命令: mysql dbname -u dbuser -
/* MyISAM */ SET AUTOCOMMIT = 0; INSERT INTO table_name (table_field) VALUES ('foo'); INSERT INTO ta
当我立即执行 START TRANSACTION 后跟 SHOW VARIABLES LIKE 'autocommit' 时,我看到变量 autocommit 仍然设置为 打开。在我明确地说 COMM
我已经进行了几次试验,如果将 autocommit 设置为 False,速度似乎会有所提高。 但是,我担心在我的代码末尾进行一次提交,数据库行将不会更新。因此,例如,我对数据库进行了几次更新,但都没有
我是一名优秀的程序员,十分优秀!