Programmatic JDBC事务处理
来源:互联网 发布:pagerank算法实现 编辑:程序博客网 时间:2024/05/06 15:10
package com.yinbodotcc.Transaction;
/*
* 首先说明的是:这个例子里面的事务机制实在是凑出来的,
* 目的就是为了体现自己编程在代码中如何细粒度实现事务控制。
*/
import javax.sql.*;
import java.util.*;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.support.DefaultTransactionDefinition;
import org.springframework.transaction.TransactionStatus;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.transaction.support.TransactionTemplate;
import org.springframework.transaction.support.TransactionCallbackWithoutResult;
import org.springframework.dao.DataAccessException;
public class UserDao implements IUserDao {
private JdbcTemplate jdbcTemplate;
private DataSourceTransactionManager dataSourceTransactionManager;
private DefaultTransactionDefinition defaultTransactionDefinition;
public void setDs(DataSource ds)
{
jdbcTemplate=new JdbcTemplate(ds);
defaultTransactionDefinition =new DefaultTransactionDefinition();
defaultTransactionDefinition.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
dataSourceTransactionManager=new DataSourceTransactionManager(ds);
}
//TransactionManager实现了事务机制
public void insert(User user)
{
String name=user.getName();
int age=user.getAge();
TransactionStatus ts=dataSourceTransactionManager.getTransaction(defaultTransactionDefinition);
String sql1="insert into user(name,age) values(?,?)";
try
{
jdbcTemplate.update(sql1, new Object[]{name,age});
jdbcTemplate.update(sql1, new Object[]{name,"hello"});//故意写错的,类型不匹配
}
catch(Exception e)
{
dataSourceTransactionManager.rollback(ts);
e.printStackTrace();
}
dataSourceTransactionManager.commit(ts);
}
/
/TransactionTemplate体现事务处理机制
public User find(int id)
{
final int tempId=id;
final User user=new User();
TransactionTemplate tt=new TransactionTemplate(dataSourceTransactionManager);
tt.execute(new TransactionCallbackWithoutResult(){
public void doInTransactionWithoutResult(TransactionStatus status)
{
try
{
/*
* 尽管这里会出现事务回滚,但是取出来的值赋给user以后,user就会拥有这个值
*/
String sql="select * from user where id=?";
Map m=jdbcTemplate.queryForMap(sql,new Object[]{tempId});
int id=(Integer)m.get("id");
String name=(String)m.get("name");
int age=(Integer)m.get("age");
user.setAge(age);
user.setId(id);
user.setName(name);
sql="insert into user(id,name,age) values(78,'dfx','hello')";
jdbcTemplate.execute(sql);
}
catch(DataAccessException e)
{
status.setRollbackOnly();
e.printStackTrace();
}
}
});
return user;
}
}
- Programmatic JDBC事务处理
- jdbc事务处理
- jdbc事务处理
- jdbc事务处理
- JDBC ---- 事务处理
- JDBC事务处理
- jdbc事务处理
- jdbc事务处理
- JDBC事务处理
- jdbc事务处理
- JDBC事务处理
- jdbc事务处理
- JDBC事务处理
- jdbc事务处理
- JDBC事务处理
- jdbc事务处理
- jdbc事务处理
- JDBC事务处理
- 基于VB-CrystalReport 的C/S报表架构讨论
- 正则表达式(2)
- winzard过程中输入密码的问题
- 博文视点5周月庆典纪念专题
- “网商”热能烧多久?
- Programmatic JDBC事务处理
- 验证框架使用指南
- 熊猫烧香之歌曲版
- SOAP
- struts验证框架
- 多次运行一个存储过程时一些模忽问题
- 使用Axis开发Web Service程序
- 关于数组的用法
- 介绍COM,第一部分--COM是什么以及如何使用它.