commit和rollback是数据库事务的两个概念。
一个数据库事务有开始和结束边界(boundary), 位于boundary的对数据库的各种操作认为是对该事务的操作。
一个事务的要占用数据库的一些资源,比如可能获得数据库的某个表的某条记录的lock,如果一个事务长期占用资源而不去释放,那么对其他的事务是不利的,可能会使得速度很慢。
所以对数据库操作的正确做法是让事务短小,只做一些应该在事务里边做的事情,以最快的速度让一个事务结束,从而释放该事务所占有的资源。
如何让一个事务结束?commit或者rollback。两者选其一,而且必选其一,才能够确保一个事务被可靠的,安全的终止。commit意味着对事务中的操作确定,rollback意味着对事务中的操作否定。
JDBC中如何正确的处理事务?
1。如果需要保持一些操作的原子性,比如转帐就需要原子性,那么必须要将这些操作放在一个事务中。
Connection conn = 。。。;
conn.setAutoCommit(false);
//从一个人那里扣钱
//往另一个人那里加钱
//做一些其他的事情,比如通过jms来广播一条成功的消息
conn.commit();
上面的代码看起来似乎完成了转帐的操作,其实需要的改进的地方很多。
1)不能保证上面的事务能够可靠的终止。
如果对数据库的扣钱,加钱操作失败,那么conn.commit()不会被执行。
2)通过jms来广播消息动作跟这个事务没有太大的关系,所以不应该放在事务中。试想如果jms广播需要花5s的时间,那么该事务结束的时间就要推迟5s,释放lock的时间也要被推迟5s!
正确的代码:
Connection conn = 。。。;
boolean success = false;
try{
conn.setAutoCommit(false);
//从一个人那里扣钱
//往另一个人那里加钱
conn.commit();
success = true;
}
catch(SQLException e){
conn.rollback();
success = false;
}
if(success)//做一些其他的事情,比如通过jms来广播一条成功的消息
2。如果不需要处理原子性的操作,比如查询,那么只需要conn.setAutoCommit(true);做就可以了。
http://publishblog.blogchina.com/blog/tb.b?diaryID=1639793
分享到:
相关推荐
在JDBC中,可以通过Connection对象的setAutoCommit方法关闭自动提交,并使用commit和rollback方法控制事务: ```java conn.setAutoCommit(false); try { // SQL操作 conn.commit(); } catch (SQLException e) { ...
Connection对象提供了commit、rollback和setAutoCommit方法来管理事务。commit方法用于提交事务,rollback方法用于回滚事务,setAutoCommit方法用于设置事务的自动提交模式。 jdbc封装增删改查 在上面的代码中,...
MySQL 整合 JDBC 是将 MySQL 数据库与 JDBC 技术结合使用,实现对数据库的操作和管理。下面是 MySQL 整合 JDBC 的相关知识点: 一、DDL(Data Definition Languages) * 定义数据段、数据库、表、列、索引等数据库...
Spring的事务管理机制是基于PlatformTransactionManager接口的实现的,该接口定义了三个方法:getTransaction、commit和rollback。这三个方法是事务管理的核心,分别负责事务的开启、提交和回滚。 事务原子性 在...
使用JDBC事务可以确保数据库的一致性和可靠性,例如,在一个事务中,如果某个SQL语句执行失败,可以使用rollback()方法来回滚事务,以确保数据库的一致性。 JTA(XA)事务 JTA(XA)事务是Java Transaction API...
可以通过调用`Connection`对象的`setAutoCommit(false)`来关闭自动提交,然后手动调用`commit()`或`rollback()`来控制事务。 6. **连接池**: 在实际应用中,为了提高性能和资源利用率,通常会使用连接池,如C3P0...
9. **事务处理**:JDBC提供了对数据库事务的支持,开发者可以通过`Connection`对象的`setAutoCommit()`和`commit()`、`rollback()`方法来控制事务的开始、提交和回滚。 10. **性能优化**:使用JDBC时,可以考虑...
-事务管理:理解事务的ACID属性(原子性、一致性、隔离性、持久性),以及如何在JDBC中使用`Connection`对象的begin、commit和rollback方法来控制事务。 标签中的“源码”可能意味着要深入理解JDBC的工作原理,包括...
5. **事务处理**:Hive默认不支持事务,但某些版本开始支持ACID特性,可以在特定配置下使用`Connection.commit()`和`Connection.rollback()`进行事务管理。 6. **错误处理**:当发生错误时,`Statement`和`...
JDBC提供了对数据库事务的控制,如beginTransaction()、commit()和rollback()方法,用于确保数据的一致性和完整性。 9. 游标和批处理: ResultSet中的游标允许按需读取数据,避免一次性加载大量结果集导致内存...
8. 事务管理:JDBC支持事务处理,通过调用`Connection`对象的`setAutoCommit(false)`禁用自动提交,然后手动调用`commit()`或`rollback()`来控制事务边界。 9. 性能优化:使用批处理(`addBatch()`和`executeBatch...
事务管理确保数据的一致性和完整性,例如通过begin、commit和rollback操作。 在Java Web应用中,通常会使用连接池来管理数据库连接,比如C3P0、HikariCP和Apache DBCP,以提高性能和资源利用率。连接池会在应用启动...
JDBC支持事务管理,通过`Connection`对象的`setAutoCommit()`和`commit()`/`rollback()`方法控制。例如: ```java conn.setAutoCommit(false); // 关闭自动提交 try { // 执行SQL操作 conn.commit(); // 提交事务...
JDBC提供了多个事务相关的方法,例如commit()、rollback()、setTransactionIsolation()等。这些方法可以用来控制事务的执行和提交。 八、结论 JDBC事务管理是非常重要的一部分。好的事务管理可以确保数据的一致性...
`Connection`对象提供了`setAutoCommit()`方法来控制自动提交,以及`commit()`和`rollback()`方法。 7. **批处理操作**:对于大量相同结构的SQL语句,可以使用`addBatch()`和`executeBatch()`方法进行批处理,提高...
3. **事务管理**:根据业务需求,适当地使用BEGIN、COMMIT和ROLLBACK语句进行事务管理。 4. **预编译的SQL语句**:使用PreparedStatement防止SQL注入攻击,并提高性能。 总的来说,sqljdbc4-4.0.jar为Java开发者...
JDBC支持事务控制,包括`Connection`对象的`setAutoCommit()`方法(设置自动提交)以及`commit()`和`rollback()`方法(提交和回滚事务)。这对于保证数据一致性至关重要。 **5. JDBC优化技巧** - 使用...
通过设置Connection的自动提交属性(`conn.setAutoCommit(false)`)来开启手动事务,并使用`commit()`和`rollback()`方法提交或回滚事务。 ### 5. JDBC批处理 批处理可以提高性能,通过批量执行多条SQL语句。可以...
在JDBC中,可以使用Connection对象的commit()和rollback()方法来提交和回滚事务。 JDBC API本身并不标准化SQL语法,因此JDBC类库并不直接处理SQL语句的语法差异。JDBC API位于java.sql包中,它提供了一套标准的方法...