`

JDBC事务隔离及保存点

 
阅读更多
package com.db;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class ConnectionManager {
	private static Connection connection;
	public static Connection getConnection() throws ClassNotFoundException, SQLException{
		Class.forName("com.mysql.jdbc.Driver");//加载驱动类
		connection=DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "root");
		return connection;
	}
}
 
package com.test;

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import com.db.ConnectionManager;
/**
 * JDBC设置事务隔离级别
 * @author 守望幸福
 *
 */
public class UnAutoCommit {
	static Connection con;
	public static void main(String[] args) throws SQLException {
		try {
			con=ConnectionManager.getConnection();
			con.setAutoCommit(false);//connection默认自动提交事务,false为不自动提交
			DatabaseMetaData dm=con.getMetaData();
			System.out.println("是否支持事务隔离"+dm.supportsTransactions());
			System.out.println("支持事务隔离0"+dm.supportsTransactionIsolationLevel(Connection.TRANSACTION_NONE));
			System.out.println("支持事务隔离1"+dm.supportsTransactionIsolationLevel(Connection.TRANSACTION_READ_UNCOMMITTED));
			System.out.println("支持事务隔离2"+dm.supportsTransactionIsolationLevel(Connection.TRANSACTION_READ_COMMITTED));
			System.out.println("支持事务隔离4"+dm.supportsTransactionIsolationLevel(Connection.TRANSACTION_REPEATABLE_READ));
			System.out.println("支持事务隔离8"+dm.supportsTransactionIsolationLevel(Connection.TRANSACTION_SERIALIZABLE));
			con.setTransactionIsolation(Connection.TRANSACTION_REPEATABLE_READ);//设置事务隔离级别
			Statement stmt=con.createStatement();
			int row=stmt.executeUpdate("insert into student(name,score,subject)values('李四',20,'数学')");
			System.out.println("事务提交前row:"+row);
			con.commit();
			System.out.println("事务提交后row:"+row);
		} catch (Exception e) {
			con.rollback();
		}
	}

}
 
package com.test;

import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Savepoint;
import java.sql.Statement;

import com.db.ConnectionManager;
/**
 * SavePoint JDBC3之后引入的新特性
 * SavePoint 接口允许用户将事务分割为多个阶段, 用户可以指定回滚事务到特定保存点,并不会回滚到事务的起点
 * @author 守望幸福
 *
 */
public class SavePoint {
	static Connection con;
	public static void main(String[] args) throws ClassNotFoundException, SQLException {
		con=ConnectionManager.getConnection();
		con.setAutoCommit(false);//connection默认自动提交事务,false为不自动提交
		con.setTransactionIsolation(Connection.TRANSACTION_REPEATABLE_READ);
		Statement stmt=con.createStatement();
		int row=stmt.executeUpdate("insert into student(name,score,subject)values('李四',20,'数学')");
		Savepoint savepoint=con.setSavepoint("first savePoint");//设置保存点
		int row1=stmt.executeUpdate("insert into student(name,score,subject)values('王五',80,'哲学')");
		con.rollback(savepoint);//回滚至保存点,在保存点之前的事务依旧提交数据持久化到数据库中,保存点之后的事务回滚,数据不会持久化
		con.commit();
		System.out.println("row:"+row);
		System.out.println("row1:"+row1);
	}

}
 
分享到:
评论

相关推荐

    你不知道的JDBC高级应用

    1.批处理:对数据库的CRUD速度会有质...7.事务:设定事务的保存点,可以把事务隔离. crud c:create r:read u:update d:delete JTA 分布式事务 跨数据库的事务 JNDI TomCat 方便分布式处理 dbcp JDBC连接池 ............

    JDBCPool.java

    JDBC连接池 原子性:最小的单元,如果一个是失败了,则一切的操作将全部失败。 一致性:如果事务出现错误,则...持久性:当一个系统崩溃时,一个事务依然可以提交,当事务完成后,操作结果保存在磁盘中,不会被回滚

    Java_JDBC由浅入深

    8.4 设置保存点 55 8.5 JTA事务的介绍 56 8.6 数据库的隔离级别介绍 56 8.6.1 未提交读 57 8.6.2 提交读 58 8.6.3 重复读 59 8.6.4 序列化读 60 8.7 小结 62 第九节 PreparedStatement接口的使用 62 第十节 ...

    Java数据编程指南

    Java数据库连接(JDBC) 什么是JDBC JDBC结构 开始起步 使用...JDBC事务隔离级别 保存点 使用光标 PreparedStatement接口 批更新 CallableStatement JDBC Escape语法 JDBC支持类 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

     21.3 数据库的事务隔离级别  21.3.1 在mysql.exe程序中设置隔离级别  21.3.2 在应用程序中设置隔离级别  21.4 在应用程序中采用悲观锁  21.4.1 利用数据库系统的独占锁来实现悲观锁  21.4.2 由应用程序实现...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     21.3 数据库的事务隔离级别  21.3.1 在mysql.exe程序中设置隔离级别  21.3.2 在应用程序中设置隔离级别  21.4 在应用程序中采用悲观锁  21.4.1 利用数据库系统的独占锁来实现悲观锁  21.4.2 由应用程序实现...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part3

     21.3 数据库的事务隔离级别  21.3.1 在mysql.exe程序中设置隔离级别  21.3.2 在应用程序中设置隔离级别  21.4 在应用程序中采用悲观锁  21.4.1 利用数据库系统的独占锁来实现悲观锁  21.4.2 由应用程序实现...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part1.rar

     21.3 数据库的事务隔离级别  21.3.1 在mysql.exe程序中设置隔离级别  21.3.2 在应用程序中设置隔离级别  21.4 在应用程序中采用悲观锁  21.4.1 利用数据库系统的独占锁来实现悲观锁  21.4.2 由应用程序实现...

    续集:续集:Ruby数据库工具包

    Sequel支持高级数据库功能,例如准备好的语句,绑定变量,保存点,两阶段提交,事务隔离,主/副本配置以及数据库分片。 Sequel当前具有适用于ADO,Amalgalite,IBM_DB,JDBC,MySQL,Mysql2,ODBC,Oracle,...

    Firebird数据库中文版

    锁优化机制也支持多个事务的保存点。 在线备份: 不需要停止数据库即可进行备份,一个备份进程产生一个数据库当前的快照。因此,用户可以在备份期间持续的工作,即实现24x7(每天24小时,每周7天) 的操作。 触发器: ...

    Hibernate实战(第2版 中文高清版)

     1.3.2 用SQL/JDBC手工编写持久层   1.3.3 使用序列化   1.3.4 面向对象的数据库系统   1.3.5 其他选项   1.4 ORM   1.4.1 什么是ORM   1.4.2 一般的ORM问题   1.4.3 为什么选择ORM   1.4.4 ...

    Spring面试题

    面向方面的编程,即 AOP,是一种编程技术,它允许程序员对横切关注点或横切典型的职责分界线的行为(例如日志和事务管理)进行模块化。AOP 的核心构造是方面,它将那些影响多个类的行为封装到可重用的模块中。 AOP ...

    ssh(structs,spring,hibernate)框架中的上传下载

    系统Web层将来切换到另一种实现技术的可能性也微乎其微,所以笔者觉得没有必要为了这个业务层完全独立于调用层的过高目标而去搞一个额外的隔离层,浪费了原材料不说,还将系统搞得过于复杂,相比于其它原则,"简单...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    14.3 事务隔离级别 388 14.4 多版本读一致性 390 14.5 事务控制语句 391 14.5.1 Commit(提交) 391 14.5.2 Savepoint(保存点) 391 14.5.3 Rollback(回滚) 391 14.5.4 Set Transaction(设置事务) 391 14.5.5 ...

Global site tag (gtag.js) - Google Analytics