很久没有更新Blog,有点惭愧啊,呵呵,其实我一直在懵懵懂懂的学习事务处理。Spring把这一切封装的很好了,以至于我现在都无法正常写出一个像样的JDBC事务处理的程序,如果让我用JDBC写语句,还是有很多ASP的影子。无意中买了10月的《程序员》杂志,没想到里面讲了SQL Server的事务处理,我耐着性子看完了,于是我想把它转换成实际的Java代码。呵呵,言归正传,开始我们今天的旅行吧。
首先,我的平台是WindowsXP2+JDK1.5+myeclispe6.0+mysql5.037。这个环境配置可能与大家不一样,请注意一下。先建一个数据库,我用的是MySQL自带的test,在里面随便建立了一个表格,结构如下,大家可以随便建立,不必过于在意,因为是初探,所以开始不会有很复杂的内容,而且东西也是越简单越好,呵呵。
sql 代码
- DROP TABLE IF EXISTS `tbl_tran`;
- CREATE TABLE `tbl_tran` (
- `id` int(10) unsigned NOT NULL auto_increment,
- `name` varchar(45) NOT NULL,
- `age` int(10) unsigned NOT NULL,
- `gender` char(1) NOT NULL,
- `memo` text,
- PRIMARY KEY (`id`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
建立好了表,可以往里加入一个测试数据比如:
sql 代码
- INSERT INTO `tbl_tran` VALUES (1,'leo',0,'M','hello leo');
一切都准备好了。开始写测试代码啦。
java 代码
条码很简单,就是两个方法:
1.testTransaction():大家在使用Connection的时候,常常容易使用默认的连接,而这个连接是默认提交的,不具备事务处理的能力,所以在测试中,即使你已经设置了另一个Conn的隔离级别,但仍然不起作用,呵呵,我在刚开始编程ASP的时候,要处理关联表,不知道事务的概念,常常是一个表有数据了,另一个表出问题了,或者是插入一半数据了,然后手工改,慢慢接触了Java,使用了Spring,才知道事务的概念很重要。
2.testTransaction2():是正确的使用方法。一个连接在访问一条记录,另一个连接却想更新这条记录,那么应该看到什么样的结果呢?这个时候,隔离级别就起作用了,这里用的是READ_COMMITED,即提交读,也就是说没有提交过的记录是看不到的。只有更新的那个Conn_two提交了,或者是回滚了,也就是说Conn_two的事务结束了,才可以看到最后的结果。打印的结果是:
java 代码
- [数据库已打开...........................]
- [数据库已打开...........................]
- [先看看Connection默认事务处理级别为: 4 ]
-
- [查看需要更新的记录信息.........]
- [未更新前的详细信息.........]
- ===========================打印输出开始===============================
- [ID为: 1]
- [Name为: leo]
- [age为: 0]
- [gender为: M]
- [memo为: hello leo]
- ===========================打印输出结束===============================
- [为了测试先把查询的conn的事务设置成提交读.........]
- [数据库开始更新中..............]
- [更新后,但事务尚未提交时记录的详细信息.........]
- ===========================打印输出开始===============================
- [ID为: 1]
- [Name为: leo]
- [age为: 0]
- [gender为: M]
- [memo为: hello leo]
- ===========================打印输出结束===============================
- [更新后,但事务提交后记录的详细信息.........]
- ===========================打印输出开始===============================
- [ID为: 1]
- [Name为: leo]
- [age为: 23]
- [gender为: M]
- [memo为: hello leo]
- ===========================打印输出结束===============================
我的main()方法,测试的是testTransaction2(),而testTransaction()大家也可测试一下,了解有时候默认的配置并不是最合适的选择。这个主题还会继续补充的,今天先到这里吧。
分享到:
相关推荐
1、JavaBean中使用JDBC事务处理 在JDBC中怎样将多个SQL语句组合成一个事务呢?在JDBC中,打开一个连接对象Connection时,缺省是auto-commit模式,每个SQL语句都被当作一个事务,即每次执行一个语句,都会自动的得到...
有关JDBC事务 JTA事务 传播特性 隔离级别等等
JDBC事务管理,详细说明jdbc事务管理
JDBC事务操作例子所需jar包JDBC事务操作例子所需jar包JDBC事务操作例子所需jar包JDBC事务操作例子所需jar包
JDBC事务控制--讲述如何控制JDBC事务
Java(JDBC)事务处理
JDBC事务和JTA(XA)事务
对于Transaction 管理 为了实现数据一致性,对于数据库的JDBC编程通常需要在代码中显示的调用Connection方法的事务相关API来完成工作。
jdbc——内嵌事务 class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"></property> ...
Sharding-JDBC分布式事务应用
3.JDBC中使用事务 3.1.JDBC使用事务范例 3.2设置事务回滚点 1.事务(Transaction)的概念 事务指逻辑上的一组操作,组成这组操作的各个单元,要不全部成功,要不全部不成功。 举例:需求:把大象放入冰箱 1....
javaEE 实验三 Spring JDBC与事务管理, 一、实验目的 1、掌握Spring JDBC的配置; 2、掌握JdbcTemplae类中增删改查方法的使用; 3、了解Spring事务管理的3个核心接口; 4、了解Spring事务管理的两种方式; 5、掌握...
jdbc事务 及其实例 两种分页策略的对比
非常常用的JavaEE四层架构下的纯JDBC事务控制简单解决方案。Eclipse工程。详情参看:http://blog.csdn.net/qjyong/archive/2010/04/08/5464835.aspx
实例详解Spring JDBC事务管理.doc 实例详解Spring JDBC事务管理.doc
两个项目,一个项目是基于spring jdbc实现的分布式事务,一个是基于spring hibernate的分布式事务,hibernate项目里的applicationContext2.xml是基于mysql和mssql, applicationContext3.xml基于两个mssql, ...
JDBC事务管理及SavePoint示例Java开发Java经验技巧共12页.pdf.zip