JDBC事务的保存点处理
在JDBC的事物处理中,可以应用保存点技术,对一个事物中的处理进行部分提交.
如下示例,三个处理
1,张三减10元
2,李四加10元
3,李四加100元,
在3的地方出错的话,把1和2的处理进行提交,使用了保存点技术.
示例代码:
package test.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.Savepoint;
public class SavePoint {
public static void main(String[] args) throws Exception {
savepoint();
}
public static void savepoint() throws Exception {
// TODO Auto-generated method stub
System.setProperty("jdbc.drivers", "com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/jdbc", "root", "");
//初始化不自动提交
conn.setAutoCommit(false);
// 张三减10元
String sql = "update user set money = money - 10 where id = 1";
PreparedStatement st = conn.prepareStatement(sql);
st.executeUpdate();
// 李四加10元
sql = "update user set money = money + 10 where id = 2";
st = conn.prepareStatement(sql);
st.executeUpdate();
// 设立保存点
Savepoint sp = conn.setSavepoint();
// 李四加再加100元(SQL的where关键字写的不对,会出现异常)
sql = "update user set money = money + 100 wherewhere id = 2";
st = conn.prepareStatement(sql);
try {
st.executeUpdate();
} catch (Exception e) {
// 回滚到李四加10元后的状态
conn.rollback(sp);
System.out.println ("回滚到李四加10元后的状态");
}
conn.commit();
st.close();
conn.close();
}
}
执行文件后,查看数据库的记录,可以发现张三减少了10元,而李四增加了10元.
第三个处理李四再加100元的操作并没有进行.
总结:
1,开始要把connection设置成不进行自动提交
2,中间设定保存点
3,回滚的地方要使用保存点
4,最后不要忘记进行commit
分享到:
相关推荐
1.批处理:对数据库的CRUD速度会有质...7.事务:设定事务的保存点,可以把事务隔离. crud c:create r:read u:update d:delete JTA 分布式事务 跨数据库的事务 JNDI TomCat 方便分布式处理 dbcp JDBC连接池 ............
JDBC:本身自动帮我做事务管理的操作 AutoCommit = true; Connection.setAutoCommit(false); 正常: conn.commit(); 异常: conn.rollback(); JDBC批处理: addBatch executeBatch Statement ...
TxManager接受到补偿事务以后先通知补偿回调地址,然后再根据是否开启自动补偿事务状态来补偿或保存该次切面事务数据。 补偿事务机制 LCN的补偿事务原理是模拟上次失败事务的请求,然后传递给TxClient模块然后再次...
*如果有需要提供回滚操作的需求,使用备忘录模式非常适合,比如jdbc的事务操作,文本编辑器的Ctrl+Z恢复等。 3、单(双)链表:这个是数据结构方面的知识,代码有详细的说明。 4、显示 "正在加载,请稍后……" 原理
Java数据库连接(JDBC) 什么是JDBC JDBC结构 开始起步 使用JDBC 一个简单的范例 对映Java与SQL类型 处理SQL错误 ResultSet与数据库元数据 JDBC中的事务处理 一个JDBC事务范例 ...
DBJ.jar 一个用于替换本机JDBC协议的JAR文件,可以通过调用某些方法来连接到数据库,因此用户只需在功能中提供凭据和参数,DBJ即可处理其余部分(连接,驱动程序管理器,准备好的语句) ,结果集等)要求为了构建和...
20.5 Java应用通过Hibernate API声明JDBC事务 20.5.1 处理异常 20.5.2 Session与事务的关系 20.5.3 设定事务超时 20.6 Java应用通过Hibernate API声明JTA事务 20.7 Java应用通过JTA API声明JTA事务 ...
20.5 Java应用通过Hibernate API声明JDBC事务 20.5.1 处理异常 20.5.2 Session与事务的关系 20.5.3 设定事务超时 20.6 Java应用通过Hibernate API声明JTA事务 20.7 Java应用通过JTA API声明JTA事务 ...
20.5 Java应用通过Hibernate API声明JDBC事务 20.5.1 处理异常 20.5.2 Session与事务的关系 20.5.3 设定事务超时 20.6 Java应用通过Hibernate API声明JTA事务 20.7 Java应用通过JTA API声明JTA事务 ...
20.5 Java应用通过Hibernate API声明JDBC事务 20.5.1 处理异常 20.5.2 Session与事务的关系 20.5.3 设定事务超时 20.6 Java应用通过Hibernate API声明JTA事务 20.7 Java应用通过JTA API声明JTA事务 ...
13.2.1 将其保存在类路径上 237 13.2.2 集中放置文件 238 13.2.3 主要按返回类型来组织映射文件 239 13.3 命名规范 239 13.3.1 语句的命名 239 13.3.2 参数映射的命名 239 13.3.3 结果映射的命名 240 13.3.4 XML文件...
这个系统旨在为汽车维修店或汽车保养服务提供商提供一个管理客户信息、预约服务、跟踪维护历史和处理财务事务的平台。 技术栈介绍: Spring:一个开源的Java平台,它简化了企业级应用程序的开发。Spring提供了全面...
8. 部署的时候抛找不到jdbc的错误如何处理? 3 9. 部署过程中出现jarsigner.exe 的错误,请问如何解决? 4 10. 部署过程中出现“unable to rename old file(d:\kingdee\eas\server\lib\sp\eas_sp.jar)”to ...
3.2.1 处理关注点渗漏 3.2.2 透明和自动持久化 3.2.3 编写POJO和持久化实体类 3.2.4 实现POJO关联 3.2.5 把逻辑添加到访问方法 3.3 ORM元数据 3.3.1 XML中的元数据 3.3.2 基于注解的...
Sequel支持高级数据库功能,例如准备好的语句,绑定变量,保存点,两阶段提交,事务隔离,主/副本配置以及数据库分片。 Sequel当前具有适用于ADO,Amalgalite,IBM_DB,JDBC,MySQL,Mysql2,ODBC,Oracle,...
3在Spring中使用org.springframework.jdbc.support.lob.OracleLobHandler处理Oracle数据库的Blob类型字段。 通过这样的设置和配置,我们就可以象持久化表的一般字段类型一样处理Blob字段了。 以上是Spring+...
锁优化机制也支持多个事务的保存点。 在线备份: 不需要停止数据库即可进行备份,一个备份进程产生一个数据库当前的快照。因此,用户可以在备份期间持续的工作,即实现24x7(每天24小时,每周7天) 的操作。 触发器: ...