-
setAutoCommit(false); 后没有手动commit. 对数据库有什么影响?5
connection.setAutoCommit(false);
如果因为当机,关闭服务器等原因,没有手动 commit or rollback.
对数据库有什么影响?
问题补充:kidding87 写道因为数据库不一样,对于数据保护的机制也不都一样
对于oracle数据库来说
机器停电,那么在重起之后需要online redo logs去恢复系统到失败点
磁盘坏了,需要用archived redo logs和online redo logs区恢复数据
ORACLE在COMMIT之前已经把该写的东西写到DISK中了,COMMIT只是
1,产生一个SCN给我们TRANSACTION,SCN简单理解就是给TRANSACTION排队,以便恢复和保持一致性。
2,REDO写REDO到DISK中(LGWR,这就是log file sync),记录SCN在ONLINE REDO LOG,当这一步发生时,我们可以说事实上已经提交了,这个TRANSACTION已经结束(在V$TRANSACTION里消失了)
3,SESSION所拥有的LOCK(V$LOCK)被释放。
4,Block Cleanout ROLLBACK ROLLBACK和COMMIT正好相反,ROLLBACK的时间和TRANSACTION的大小有直接关系。因为ROLLBACK必须物理上恢复数据。 COMMIT之所以快,是因为ORACLE在COMMIT之前已经作了很多工作(产生UNDO,修改BLOCK,REDO,LATCH分配), ROLLBACK慢也是基于相同的原因。
谢谢您的回答,但可能是我没描述清楚,
我说的停止服务器指的是停止web容器,如tomcat.
e.g. 一个简单的jdbc程序.设置了断点,
当设置了 autocommit false后,
PreparedStatemen.executeUpdate()
在这个语句执行的过程中,停止了java的运行,
数据库依然还是在执行那个sql的,但java程序永远不会再commit or rollback.
这样会对数据库造成什么影响,虽然DB应该有些处理.断开这个链接,回滚这些修改等等.
但都是不确定的想当然,所以请教下具体情况..
谢谢.
问题补充:kidding87 写道你说的关闭这些关闭都是 正常关闭,未提交的事务默认回退
还有种就是中途断了,数据库对当前session正在修改的数据已经加锁,造成死锁,这个时候需要手动关闭session,关闭session后这样的数据也是会回退的
不是带锁的访问.
未提交的事务默认回退
有这句明确的话就OK啦.
2012年2月22日 09:47
2个答案 按时间排序 按投票排序
-
采纳的答案
你说的关闭这些关闭都是 正常关闭,未提交的事务默认回退
还有种就是中途断了,数据库对当前session正在修改的数据已经加锁,造成死锁,这个时候需要手动关闭session,关闭session后这样的数据也是会回退的2012年2月22日 12:31
-
因为数据库不一样,对于数据保护的机制也不都一样
对于oracle数据库来说
机器停电,那么在重起之后需要online redo logs去恢复系统到失败点
磁盘坏了,需要用archived redo logs和online redo logs区恢复数据
ORACLE在COMMIT之前已经把该写的东西写到DISK中了,COMMIT只是
1,产生一个SCN给我们TRANSACTION,SCN简单理解就是给TRANSACTION排队,以便恢复和保持一致性。
2,REDO写REDO到DISK中(LGWR,这就是log file sync),记录SCN在ONLINE REDO LOG,当这一步发生时,我们可以说事实上已经提交了,这个TRANSACTION已经结束(在V$TRANSACTION里消失了)
3,SESSION所拥有的LOCK(V$LOCK)被释放。
4,Block Cleanout ROLLBACK ROLLBACK和COMMIT正好相反,ROLLBACK的时间和TRANSACTION的大小有直接关系。因为ROLLBACK必须物理上恢复数据。 COMMIT之所以快,是因为ORACLE在COMMIT之前已经作了很多工作(产生UNDO,修改BLOCK,REDO,LATCH分配), ROLLBACK慢也是基于相同的原因。2012年2月22日 11:08
相关推荐
- 当关闭自动提交后,可以通过`Connection.commit()`方法手动提交事务。 - 示例:`connection.commit();` 3. **回滚事务**: - 当关闭自动提交后,可以通过`Connection.rollback()`方法回滚事务。 - 示例:`...
例如,当多个操作(如先插入一条记录,再更新另一条)需要一起成功或一起失败时,可以使用`Connection`对象的`setAutoCommit(false)`开启手动提交,然后在所有操作完成后使用`commit()`提交事务,如果发生错误则调用...
我们可以调用`conn.setAutoCommit(false)`来手动管理事务,然后使用`commit()`或`rollback()`来提交或回滚事务。 7. **关闭资源**: 在完成数据库操作后,必须关闭`ResultSet`、`Statement`和`Connection`,以释放...
如果你的操作涉及多个数据库更改,可以使用`Connection`对象的`setAutoCommit(false)`方法关闭自动提交,然后在完成所有更改后调用`commit()`。如果发生错误,调用`rollback()`回滚事务。 6. 关闭连接: 记得在...
通过setAutoCommit(false)关闭自动提交,然后手动调用commit()或rollback()控制事务边界,可以确保数据的一致性。在多线程环境中,还需要考虑并发控制和锁机制。 最后,JDBC 4.0引入了新的特性,如自动注册驱动、...
6. **事务处理**:SQLite支持事务,可以使用`Connection.setAutoCommit(false)`开启手动提交,并在操作完成后调用`Connection.commit()`或`Connection.rollback()`。 7. **关闭资源**:操作完毕后,确保关闭...
同时,为了保证数据的一致性,了解事务处理也是必要的,例如,使用`Connection`对象的`setAutoCommit(false)`来开启手动提交事务,以及`commit()`和`rollback()`来控制事务边界。 综上所述,Java连接数据库涉及的...
例如,使用`Connection`对象的`setAutoCommit(false)`来关闭自动提交,然后在业务逻辑完成后调用`commit()`提交事务。 8. **错误处理**:在处理数据库操作时,异常处理是必不可少的。文章中使用了`try-catch`块捕获...
通过Connection的setAutoCommit(false)关闭自动提交,然后手动调用commit()或rollback()。 6. **JDBC连接池** - 为了优化性能,开发者通常使用连接池(如C3P0、HikariCP、Apache DBCP等),预先创建并维护一定数量...
可以通过`Connection.setAutoCommit(false)`关闭自动提交,然后使用`Connection.commit()`或`Connection.rollback()`控制事务。 7. 数据库连接池:为了提高性能和资源管理,应用通常使用连接池(如C3P0、HikariCP、...
例如,使用`conn.setAutoCommit(false)`开启手动事务,然后通过`conn.commit()`或`conn.rollback()`控制事务的提交或回滚。 在实际开发中,推荐使用ORM框架如Hibernate或MyBatis,它们提供了更高级别的抽象,简化了...
JDBC提供了一些方法如`conn.setAutoCommit(false)`来手动管理事务,并使用`conn.commit()`或`conn.rollback()`来提交或回滚事务。 6. **批量操作**:当有大量数据要插入或更新时,使用预编译的PreparedStatement的`...
Java提供`Connection`对象的`setAutoCommit(false)`方法来关闭自动提交,然后通过`commit()`和`rollback()`控制事务。 5. **批处理**:对于大量数据操作,批处理可以提高效率。使用`addBatch()`添加SQL语句到批处理...
在Java中,可以通过Connection对象的setAutoCommit(false)关闭自动提交,然后手动调用commit()或rollback()。 7. **错误处理与资源释放**:在完成数据库操作后,务必关闭ResultSet、Statement和Connection,以释放...
在Java中,可以使用`Connection`对象的`setAutoCommit(false)`来禁用自动提交,然后手动调用`commit()`或`rollback()`方法来控制事务的提交和回滚。这在处理一系列相互关联的操作时非常有用,确保数据的一致性。 在...
使用`Connection`的`setAutoCommit(false)`关闭自动提交,然后在所有操作成功后调用`commit()`,如果出现错误则调用`rollback()`。 8. **资源管理**: 为了防止资源泄漏,使用完`ResultSet`、`Statement`或`...
在Java中,通过`Connection.setAutoCommit(false)`开启事务,之后手动提交或回滚事务。 ```java try { cn.setAutoCommit(false); // 执行一系列的SQL语句 cn.commit(); } catch (Exception e) { cn.rollback();...
可以使用`conn.setAutoCommit(false)`来手动控制事务,并在所有操作成功后调用`conn.commit()`提交事务,或者在出现错误时调用`conn.rollback()`回滚。 9. **连接池**:在实际应用中,为了性能和资源管理,我们会...
7. **事务处理**:在Java中,可以使用`Connection`对象的`setAutoCommit(false)`来开启手动事务,`commit()`提交事务,`rollback()`回滚事务。 8. **数据库连接关闭**:在完成数据库操作后,记得关闭`Connection`、...
它允许Java应用程序通过Java代码执行SQL语句,实现对数据库的数据操作。本篇将深入探讨如何使用JDBC连接不同的数据库以及如何处理事务。 一、JDBC连接数据库 1. 加载驱动:在使用JDBC之前,我们需要加载对应的...