- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我在创建连接后立即设置 con.setAutoCommit(false);
以便数据库中没有未提交的内容。但事实证明,如果您关闭连接,则无论您的 setAutoCommit() 状态如何,所有事务都将被提交。
Class.forName("oracle.jdbc.driver.OracleDriver");
con = DriverManager.getConnection("jdbc:oracle:thin:@192.168.7.5:xxxx:xxx", "xxx", "xxx");
con.setAutoCommit(false);
st = con.createStatement();
String sql = "INSERT INTO emp (eid, name, dob, address) VALUES (?, ?, ?, ?)";
PreparedStatement statement = con.prepareStatement(sql);
statement.setInt(1, 8 );
statement.setString(2, "kkk" );
statement.setDate(3, date );
statement.setString(4, "pppp" );
pst = con.prepareStatement(sql);
int rowsInserted = statement.executeUpdate();
//con.commit ();
System.out.println ("rowsInserted "+rowsInserted);
con.close ();
即使在评论 con.commit ();
连接关闭时插入行,所以我想知道 con.commit ();
有什么用?
Another answer说它是特定于供应商的:
If a Connection is closed without an explicit commit or a rollback; JDBC does not mandate anything in particular here and hence the behaviour is dependent on the database vendor. In case of Oracle, an implict commit is issued.
这没有意义。谢谢。
最佳答案
注销 Oracle 会提交任何待处理的事务。无论您是通过 conn.close()
使用 sqlplus 还是 JDBC 驱动程序,都会发生这种情况。请注意,发出提交的不是驱动程序,而是服务器。在注销期间,服务器提交挂起的更改。在您的 Java 程序中,如果您想确保未提交挂起的更改,您始终可以在调用 conn.close()
之前调用 conn.rollback()
。
你问conn.commit()
有什么用。它用于在业务逻辑的特定点显式提交事务。例如,如果您在连接池中缓存连接,则可以在将连接释放回池之前禁用自动提交和提交挂起的更改。有些人更喜欢启用自动提交模式(这是 JDBC 中的默认模式),而不用担心显式提交或回滚更改。这取决于您的业务逻辑。您可以问问自己:我是否需要回滚 DML 执行?如果答案是肯定的,那么您应该禁用自动提交并显式提交事务。
关于java - Connection.setAutoCommit(false); 的用途是什么?什么时候用Oracle数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39890677/
public void batchUpdate() throws SQLException { Statement stmt = null; try { this.connection.set
我遇到过this甲骨文java教程。作为该主题的初学者,我无法理解为什么需要在事务结束时设置 con.setAutocommit(true);。 这是神谕的解释: The statement con.
假设我有一个创建数据库连接的常用方法: Connection getConnection() throws SQLException { Connection con = ... // cre
这是典型的项目结构,一旦用户登录到应用程序,就会创建数据库连接。 Login.java{ Creating DB Connection DriverManager.registerDr
如果我们在 Oracle DB 的 Java 类中使用两次 setAutoCommit(true) 会发生什么。 try{ Connection conn = getConnection();
我正在使用 postgresql 9.2 和 C3p0 0.9.2.1,我创建了一个连接定制器来禁用 autoCommit 并设置 transactionMode 但是当我在 InitialConte
如果我执行 connection.setAutoCommit(false); 会发生什么,它会在数据库端创建一个新事务吗? 最佳答案 根据documentation , connection.setA
我注意到一些程序员使用 COMMIT 其他使用 conn.setAutoCommit(true); 来结束事务或回滚那么使用一个而不是另一个? 主要区别在哪里? conn.setAutoCommit(
我注意到一些程序员使用 COMMIT 其他使用 conn.setAutoCommit(true); 来结束事务或回滚那么使用一个而不是另一个? 主要区别在哪里? conn.setAutoCommit(
从池中获取数据库连接 (conn)。 假设该连接上的autocommit 为 TRUE。 现在 conn.setautocommit(false) 已设置; 然后经过几次语句更新,最后 conn.co
我的提问的基本根源来自于这种观察。当我使用Hibernate并进行任何查询时,我在MySQL日志中得到以下内容: SET autocommit=0 insert into SimpleNamedEnt
我在创建连接后立即设置 con.setAutoCommit(false); 以便数据库中没有未提交的内容。但事实证明,如果您关闭连接,则无论您的 setAutoCommit() 状态如何,所有事务都将
DB 是 Oracle。 我想为 SQL 存储过程和函数使用 Connection.setAutoCommit。会成功吗? 对于调用过程,我使用 CallableStatement 最佳答案 不行,c
我正在尝试在 JDBC 中为我正在开发的应用程序执行事务,但 Connection#setAutoCommit(false) 似乎不起作用。代码如下: String insertCliente = "
我遇到了 Postgres 驱动程序的问题,该驱动程序是 9.1-901.jdbc4,我的数据库服务器是 Postgres 10。我在批量更新中遇到问题,因此我尝试将驱动程序更改为版本 42.2.5。
我有一个 Spring Batch 项目,正在使用 Atomikos 进行事务管理。 这是我的数据源配置和atomikos配置。 @Bean public DataSource dataSou
我创建了一个 DBManager 类,如下所示 public class DBManager { public static String DRIVER = "oracle.jdbc.dr
假设我有以下代码。 try { connection.setAutoCommit(false) ; .... .... connection.commit(); } c
我对 set chained 有一些困惑setAutoCommit()中的声明net.sourceforge.jtds.jdbc.Driver中的方法 source code说: 2161 if (
我是一名优秀的程序员,十分优秀!