JDBC以及相关技术学习(七)----事务机制与保存点
2013-04-18 22:05
267 查看
先上代码:
public static void update() throws SQLException{
JDBCToolSingleTon jDBCToolSingleTon = JDBCToolSingleTon.getInstance();
Connection conn = jDBCToolSingleTon.getConnection();
conn.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);//最高隔离级别
Statement statement = conn.createStatement();
conn.setAutoCommit(false);//设置为非自动提交
Savepoint sp= null;//事务保存点
String sql = "update UserInfo set account = account-10 where name='chensc'";
int i = statement.executeUpdate(sql);
sp = conn.setSavepoint();
if(i<100)
{
conn.rollback(sp);
throw new RuntimeException("事务回滚测试");
}
sql = "update UserInfo set account = account+10 where name='spring'";
i = statement.executeUpdate(sql);
conn.commit();
jDBCToolSingleTon.freeResource(conn, null, statement);
}
JDBC的事务处理很简单,主要就三句代码,包括了:
conn.setAutoCommit(false);//设置为非自动提交,实际就是启动了事务
conn.rollback();//返回事务
conn.commit();//提交事务
如果不想返回到事务起点,可以使用保存点将中间的位置保存下来,如下:
Savepoint sp= null;//事务保存点
sp = conn.setSavepoint();
conn.rollback(sp);//注意,这是rollback需要带参数,参数就是事务的保存点,保存点在哪里,事务就回滚到那里。
在数据库多个事务的处理中,可能存在多个事务互相影响的情况,包括了:
脏读:读到其他事务未提交的数据
重复读:读取一个数据后,再读的时候被其他事务修改了。
幻读:事务1读出记录时,事务2增加了记录并提交,事务1再次读取时读取到了事务2的记录。
为了解决这些问题,可以使用隔离级别来处理,JAVA使用起来很简单,如下:
conn.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);//最高隔离级别
public static void update() throws SQLException{
JDBCToolSingleTon jDBCToolSingleTon = JDBCToolSingleTon.getInstance();
Connection conn = jDBCToolSingleTon.getConnection();
conn.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);//最高隔离级别
Statement statement = conn.createStatement();
conn.setAutoCommit(false);//设置为非自动提交
Savepoint sp= null;//事务保存点
String sql = "update UserInfo set account = account-10 where name='chensc'";
int i = statement.executeUpdate(sql);
sp = conn.setSavepoint();
if(i<100)
{
conn.rollback(sp);
throw new RuntimeException("事务回滚测试");
}
sql = "update UserInfo set account = account+10 where name='spring'";
i = statement.executeUpdate(sql);
conn.commit();
jDBCToolSingleTon.freeResource(conn, null, statement);
}
JDBC的事务处理很简单,主要就三句代码,包括了:
conn.setAutoCommit(false);//设置为非自动提交,实际就是启动了事务
conn.rollback();//返回事务
conn.commit();//提交事务
如果不想返回到事务起点,可以使用保存点将中间的位置保存下来,如下:
Savepoint sp= null;//事务保存点
sp = conn.setSavepoint();
conn.rollback(sp);//注意,这是rollback需要带参数,参数就是事务的保存点,保存点在哪里,事务就回滚到那里。
在数据库多个事务的处理中,可能存在多个事务互相影响的情况,包括了:
脏读:读到其他事务未提交的数据
重复读:读取一个数据后,再读的时候被其他事务修改了。
幻读:事务1读出记录时,事务2增加了记录并提交,事务1再次读取时读取到了事务2的记录。
为了解决这些问题,可以使用隔离级别来处理,JAVA使用起来很简单,如下:
conn.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);//最高隔离级别
相关文章推荐
- JDBC以及相关技术学习(三)----运载查询结果的利器ResultSet
- JDBC以及相关技术学习(九)----简单的连接池实现
- JDBC以及相关技术学习(五)----PreparedStatement特殊参数处理
- JDBC以及相关技术学习(二)----把JDBC获取连接封装成一个工具类
- JDBC以及相关技术学习(一)----第一个JDBC程序
- JDBC以及相关技术学习(十)----拦截Connection的close方法
- JDBC以及相关技术学习(四)----运载SQL进行查询交通工具Statement
- JDBC以及相关技术学习(八)----JDBC元数据
- JDBC以及相关技术学习(六)----批量SQL处理
- JDBC 学习笔记(三)—— 数据源(数据库连接池):DBCP数据源、C3P0 数据源以及自定义数据源技术
- 从零开始学JDBC--1.11 事务机制以及案例分析
- 尽管关于Java中文问题的讨论已经相当多了,但由于Java的相关技术标准繁多,面向Java的Web服务器、应用服务器以及JDBC数据库驱动等都没有官方的标准,所以Java应用在处理中文时所存在的问
- 区块链相关技术学习总结(1)——区块链以及区块链技术入门详解
- JDBC 学习笔记(三)—— 数据源(数据库连接池):DBCP数据源、C3P0 数据源以及自定义数据源技术
- Docker+ K8S 学习(一):Docker 介绍以及其相关术语、底层原理和技术
- tensorflow学习(4):保存模型Saver.save()的参数命名机制以及restore并创建手写字体识别引擎
- MiniGUI 的多窗口机制以及相关的窗口类技术
- JDBC学习笔记——事务、存储过程以及批量处理
- 不明觉厉的spring(4)---spring对持久层(jdbc,hibernate)以及事务的支持
- 事务保存点以及回滚事务