`
ZhengMingwei
  • 浏览: 135184 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JDBC对事务的支持

阅读更多

JDBC对事务的支持 
    并不是所有的数据库都支持事务,即使支持事务的数据库也并非支持所有的事务隔离级别,你可以通过Connection# getMetaData()方法获取DatabaseMetaData对象,并通过该对象的supportsTransactions()、supportsTransactionIsolationLevel(int level)方法查看底层数据库的事务支持情况。Connection默认情况下是自动提交的,也即每条执行的SQL都对应一个事务,为了能够将多条SQL当成一个事务执行,必须先通过Connection#setAutoCommit(false)阻止Connection自动提交,并可通过Connection#setTransactionIsolation()设置事务的隔离级别,Connection中定义了对应SQL 92标准4个事务隔离级别的常量。通过Connection#commit()提交事务,通过Connection#rollback()回滚事务。下面是典型的JDBC事务数据操作的代码:
    代码清单 1 JDBC事务代码

 

Connection conn ; try{ conn = DriverManager.getConnection();①获取数据连接 conn.setAutoCommit(false); ②关闭自动提交的机制 conn.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE); ③设置事务隔离级别 Statement stmt = conn.createStatement(); int rows = stmt.executeUpdate( "INSERT INTO t_topic VALUES(1,’tom’) " ); rows = stmt.executeUpdate( "UPDATE t_user set topic_nums = topic_nums +1 "+ "WHERE user_id = 1"); conn.commit();④提交事务 }catch(Exception e){ … conn.rollback();⑤提交事务 }finally{ … }

     在JDBC 2.0中,事务最终只能有两个操作:要么提交要么回滚。但是,有些应用可能需要对事务进行更多的控制,而不是简单地提交或回滚。JDBC 3.0(JDK 1.4及以后的版本)引入了一个全新的保存点特性,Savepoint 接口允许你将事务分割为多个阶段,你可以指定回滚到事务的特定保存点,而非象JDBC 2.0一样只回滚到开始事务的点,如图 1所示:

 

 

 


                                                                             图 1 带Savepoint的事务 
    下面的代码使用了保存点的功能,在发生特定问题时,回滚到指定的保存点,则非回滚整个事务,如代码清单 2所示: 
代码清单 2使用保存点的事务代码

… Statement stmt = conn.createStatement(); int rows = stmt.executeUpdate( "INSERT INTO t_topic VALUES(1,’tom’) " ); Savepoint svpt = conn.setSavepoint("savePoint1");①设置一个保存点 rows = stmt.executeUpdate( "UPDATE t_user set topic_nums = topic_nums +1 "+ "WHERE user_id = 1"); … conn.rollback(svpt); ②回滚到①处的savePoint1,①之前的SQL操作,在整个事务提交后依然提交,但①到②之间的SQL操作被撤销了 … conn.commit();③提交事务


    并非所有数据库都支持保存点功能,你可以通过DatabaseMetaData#supportsSavepoints()方法查看是否支持。

分享到:
评论

相关推荐

    Java jdbc三层及事务(转账案例)

    通过转账案例讲解了三层和事务,以及容易出现问题的关键点

    Spring.3.x企业应用开发实战(完整版).part2

    9.1.5 JDBC对事务支持 9.2 ThreadLocal基础知识 9.2.1 ThreadLocal是什么 9.2.2 ThreadLocal的接口方法 9.2.3 一个TheadLocal实例 9.2.4 与Thread同步机制的比较 9.2.5 Spring使用ThreadLocal解决线程安全问题 9.3 ...

    Spring3.x企业应用开发实战(完整版) part1

    9.1.5 JDBC对事务支持 9.2 ThreadLocal基础知识 9.2.1 ThreadLocal是什么 9.2.2 ThreadLocal的接口方法 9.2.3 一个TheadLocal实例 9.2.4 与Thread同步机制的比较 9.2.5 Spring使用ThreadLocal解决线程安全问题 9.3 ...

    JDBC学习资料

    1、什么是JDBC; 2、理解JDBC原理、知道什么是JDBC驱动;3、知道JDBC的功能;4、掌握JDBC中几个重要类的使用:Connection、Statement、...7、理解数据库事务、JDBC对事务的支持、以及JDBC事务的原理和如何使用JDBC事务。

    taos-jdbcdriver-2.0.4.jar

    由于不支持删除和修改,所以也不支持事务操作。 目前不支持表间的 union 操作。 目前不支持嵌套查询(nested query),对每个 Connection 的实例,至多只能有一个打开的 ResultSet 实例;如果在 ResultSe

    shardingsphere_docs_cn.pdf

    使用Sharding-JDBC进行分库分表,...事务支持将介绍Sharding-JDBC如何通过使用柔性事务的方式来实现分布式事务。 分页是否影响性能?Oracle和SQLServer的分页涉及到子查询又该如何处理?请阅读分页及子查询。 Sharding

    sqljdbc_8.2.2.0_chs.zip

    JDBC 通过调用其接口提供的方法, 提供了 Java 应用程序与各种数据库服务器之间的连接服务, 它支持 ANSI SQL- 92 标准, 实现了从 Java 程序内调用标准的 SQL 命令对数据库进行查询、插入、删除和更新等操作, 并...

    springboot2+两种方式:(读写分离、动态DataSource、事务懒处理)+sharding-jdbc.zip

    (2)、支持事务 (3)、配置中心化 (4)、存储过程不能正常解析 ———————————————— 版权声明:本文为CSDN博主「毛豆有毛没豆」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及...

    JDBC笔记 JDBC笔记

    能够通过getMetaData方法获得数据库提供的信息、所支持的SQL语法、存储过程和此连接的功能等信息。代表了数据库。 java.sql.Driver 每个驱动程序类必需实现的接口,同时,每个数据库驱动程序都应该提供一个实现...

    Java_JDBC由浅入深

    第八节 JDBC对事务的支持 52 8.1 模拟转账 53 8.2 jdbc默认事务 54 8.3 事务提交与回滚 54 8.4 设置保存点 55 8.5 JTA事务的介绍 56 8.6 数据库的隔离级别介绍 56 8.6.1 未提交读 57 8.6.2 提交读 58 8.6.3 重复读 ...

    JDBC工具包MidaoJDBC.zip

    Midao JDBC 简化了 JDBC 的开发,特点是灵活、可定制、简单直观,提供大量的功能,包括事务处理、元数据操作、类型处理、检视、输入输出处理和转化,带连接池的数据源支持;缓存和懒查询执行;命名参数;多供应商...

    Spring事务传播特性解析

    通过代码解析spring传播特性,包括 1、Propagation.REQUIRED 方法被调用时自动开启事务,在事务范围内使用则使用同一个事务,否则开启新事务。 2、Propagation.REQUIRES_NEW ...需要JDBC3.0以上支持。

    halo-query:建立在spring jdbc 基础上的数据库操作框架。简化spring jdbc调用。支持分布式数据库操作,支持单库jdbc事务

    ##支持分分布式数据库操作,支持单库jdbc事务,支持读写分离(请看database_distribution.md) ##需要注意的是,查询使用的sql,所有被查询的字段都具有别名,例如 ###table=user tableAlias=user_ column=userid ...

    基于 SpringBoot 多数据源 动态数据源 主从分离 快速启动器 支持分布式事务

    基于 SpringBoot 多数据源 动态数据源 主从分离 快速启动器 支持分布式事务。一个基于springboot的快速集成多数据源的启动器。支持 数据源分组 ,适用于多种场景 纯粹多库 读写分离 一主多从 混合模式。支持数据库...

    基于java的企业级应用开发:Spring Jdbc.ppt

    * * * * * * * Spring Jdbc Spring JDBC模块有什么作用? Spring JDBC Spring的JDBC模块负责数据库资源管理和错误处理,大大... 其主要功能是获取数据库连接,还可以引入对数据库连接的缓冲池和分布式事务的支持,它可

    注入JdbcTemplate启用事务管理.docx

    @see Propagation#REQUIRED 支持当前事务,如果没有则新建一个事务, 例:a方法调用b方法,如果a方法有事务,则b加入a事务,如果a没有,则b新建一个事务 @see Propagation#SUPPORTS 支持当前事务,如果没有则以非...

    JDBC封装类升级版,支持DBCP、C3P0连接池,Java连接数据库带例子

    Java JDBC封装类升级版,带增删改查例子,支持oracle,MySql,hsqldb 等,支持事务,返回数据格式 支持二维数组,MAP格式,以及javabean对象。有利于初学者DbDemo.java为demo,Connect为jdbc封装类,可以作为项目共通类...

    纯JSP-JDBC开发Web程序

    2.用特殊的回调机制进行JDBC封装,以致不用每次的JDBC访问都要进行数据库连接和关闭,支持数据库的CURD和事务处理; 3.具有错误日志、数据库连接池、JQuery调用、分页处理等功能,能够有效减少代码量。

    jdbc连接数据库的方式2

     值得注意的是,一旦关闭了自动提交功能,我们就需要通过调用Connection类的commit()和rollback()方法来人工的方式对事务进行管理。  3、在动态SQL或有时间限制的命令中使用Statement对象  在执行SQL命令时,我们...

    shardingJdbc 小demo 源码下载

    组成部分: JDBC、Proxy 和 Sidecar(规划中)这 3 款既能够独立部署,又支持混合部署配合使用的产品组成。 功能特性:它们均提供标准化的数据水平扩展、分布式事务和分布式治理等功能,可适用于如 Java 同构、异构...

Global site tag (gtag.js) - Google Analytics