`

java控制事务级别

 
阅读更多
JDBC事务并发产生的问题和事务隔离级别
原子操作使用事务,一组相关的操作。
数据库是事务性的资源,在数据库中所有的操作都与事务相关。JDBC中自动提交是打开的,所以我们感觉不到事务。
1,如果con.setAutoCommit(false);就可以由我们提交。
2, update
  insert
  delete

3,    con.commit();或com.rollback();

1,脏读(dirty read),读取到了没有提交的数据。
2,不可重复读(UnPrpeatable Read),两次读取到了不同的数据,就是要保持在同一时间点上两次读取到的数据相同,不能够使查询数据时进行改变。
3,幻读(phantom),在两次查询同一时间点数据时,数据数量发生改变,要保持在同一时间点上两次读取到的数据相同。

事务隔离级别

TRANSACTION_NONE不使用事务。理论上的,实际没用。
TRANSACTION_READ_UNCOMMITTED 可以读取为提交数据。能脏读,这个级别没用,都不控制。
TRANSACTION_READ_COMMITTED 可以避免脏读,不能够读取没提交的数据,最常用的隔离级别  大部分数据库的默认隔离级别
TRANSACTION_REPEATABLE_READ可以避免脏读,不可重复读取,
TRANSACTION_SERIALIZABLE可以避免脏读,重复读取和幻读,(事务串行化)会降低数据库效率

以上的五个事务隔离级别都是在Connection类中定义的静态常量,使用setTransactionIsolation(int level) 方法可以设置事务隔离级别。

JDBC2.0新特性

可滚动结果集(可双向滚动),这种结果集不但可以双向滚动,相对定位,绝对定位,并且可以修改数据信息。

滚动特性
next(),此方法是使游标向下一条记录移动。
previous() ,此方法可以使游标上一条记录移动,前提前面还有记录。
absolute(int row),可以使用此方法跳到指定的记录位置。定位成功返回true,不成功返回false,返回值为false,则游标不会移动。
afterLast() ,游标跳到最后一条记录之后。
beforeFirst() ,游标跳到第一条记录之前。(跳到游标初始位)
first(),游标指向第一条记录。
last(),有彪指向最后一条记录。
relative(int rows) ,相对定位方法,参数值可正可负,参数为正,游标从当前位置向下移动指定值,参数为负,游标从当前位置向上移动指定值。

TYPE_FORWARD_ONLY ,该常量指示指针只能向前移动的 ResultSet 对象的类型。

TYPE_SCROLL_INSENSITIVE ,该常量指示可滚动但通常不受其他的更改影响的 ResultSet 对象的类型。
TYPE_SCROLL_SENSITIVE ,该常量指示可滚动并且通常受其他的更改影响的 ResultSet 对象的类型。
        
要使用可滚动结果集时,要在Statement创建时指定参数,才可以使用
Statement st=null;
st=con.createStatement(ReusltSet.TYPE_SCROLL_INSENSITIVE,ResuleSet.CONCUR_UPDATABLE)

ResultSet结果集中,先使用moveToInsertRow(),将游标移到和结果集结构类似的传冲去中
然后可以使用updateXxx(int column,columnType value)方法来更新指定列数据,再使用insertRow() 方法插入记录,
最后将游标指回原位,moveToCurrentRow() 。

能否使用可更新结果集,要看使用的数据库驱动是否支持,还有只能用于单表且表中有主键字段(可能会是联合主键)
,不能够有表连接,会取所有非空字段且没有默认值。

能否使用JDBC2.0 ResultSet的新特性要看数据库驱动程序是否支持。

批处理更新
Statement
addBatch(String sql), 方法会在批处理缓存中加入一条sql语句
executeBatch() ,执行批处理缓存中的所有sql语句。

PreparedStatement

addBatch() 将一组参数添加到此 PreparedStatement 对象的批处理命令中。
executeBatch() 将一批命令提交给数据库来执行,如果全部命令执行成功,则返回更新计数组成的数组。
PreparedStatement中使用批量更新时,要先设置好参数后使用addBatch()方法加入缓存。
注意:批量更新中只能使用更新或插入语句

execute(String sql),这个方法的返回值是boolean类型,如果返回true就表示sql是一个select语句,可以通过getResultSet()获得结果集,如果是false,sql就是DML语句或者是DDL语句。
分享到:
评论

相关推荐

    java事务处理详解

    这种方式需要开发人员手动控制事务的开始、提交和回滚。 声明式事务是指使用Spring的配置文件来定义事务的行为。这种方式使用了AOP(Aspect-Oriented Programming)技术来实现事务处理。 注解式事务是指使用注解来...

    java事务管理和事务分类

    对于JDBC和JTA事务,开发者需要显式地调用`commit()`或`rollback()`来控制事务的结束。而在容器事务中,事务的控制权交给了容器,开发者只需在业务逻辑代码中编写无事务感知的代码,容器会在适当的时候处理事务的...

    java事务 - 使用注解

    在Java编程中,事务管理是确保数据库操作一致性的重要机制。当涉及到多个数据库操作时,事务可以确保这些操作要么全部成功,要么全部...在设计事务时,还需要充分考虑并发控制和异常处理,以保证系统的健壮性和稳定性。

    java事务 - 传递Connection

    为了控制事务,我们需要调用`Connection.setAutoCommit(false)`来禁用自动提交。 3. **开始事务**:虽然在禁用自动提交后,下一个数据库操作会自动开始一个新的事务,但也可以显式调用`Connection.beginTransaction...

    事务传播特性&事务隔离级别

    事务隔离级别是指数据库事务的隔离级别,用于控制事务之间的隔离度。Java 中有五种事务隔离级别,分别是: 1. ISOLATION_DEFAULT:这是 PlatfromTransactionManager 默认的隔离级别,使用数据库默认的事务隔离级别...

    Spring事务与Java事务比较

    Spring 的事务管理提供了更高级别的抽象,可以跨越单一方法的边界,甚至跨多个服务调用进行事务管理。它支持多种事务传播行为(如 PROPAGATION_REQUIRED、PROPAGATION_REQUIRES_NEW 等),可以根据不同的业务场景...

    Java事务设计模式_java_事务设计模式_

    2. **编程式事务模型**:在编程中显式地控制事务的开始、提交和回滚。这种方式灵活,但易出错,且代码可读性较差。例如,使用Spring的PlatformTransactionManager接口,通过TransactionTemplate或直接在Service层...

    Java中的事务处理

    - **手动提交与回滚**:通过Connection对象的commit()和rollback()方法来控制事务的开始、提交和回滚。 - **自动提交模式**:默认情况下,JDBC连接处于自动提交模式,每次SQL语句都会自动提交。关闭自动提交模式,...

    事务处理java案例代码

    这个案例可能涉及到学生信息的增删改查操作,如何在这些操作中正确管理和控制事务,确保数据的准确无误。 为了进一步学习,你可以分析这个案例中的代码,理解它是如何利用JDBC进行事务管理的,以及如何处理可能的...

    oracle 在java中的事务处理和异常回滚。

    手动事务管理通常通过`Connection`对象的`setAutoCommit(false)`方法来关闭自动提交,然后通过`commit()`和`rollback()`方法来控制事务的提交和回滚。下面是一个简单的示例: ```java try (Connection conn = ...

    Java事务处理总结[归类].pdf

    JTA事务管理由`UserTransaction`接口负责,应用调用`begin()`、`commit()`和`rollback()`方法来控制事务的生命周期。与JDBC事务不同,`XAConnection`不支持自动提交,并且不应直接调用`Connection`的提交和回滚方法...

    JAVA(Spring)事务管理.doc

    编程式事务管理使用`TransactionTemplate`,允许开发者手动控制事务的开始、提交、回滚等操作,但在实际应用中使用较少,因为这种方式会导致代码侵入性较高。相比之下,声明式事务管理通过AOP(面向切面编程)实现,...

    Hibernate事务和并发控制

    Hibernate作为一个ORM框架,它对JDBC进行了封装,提供了更高级别的对象和API来处理事务。在Hibernate中,事务可以通过配置为JDBC事务或JTA事务。默认情况下,如果没有明确配置,Hibernate会使用JDBC事务。配置JDBC...

    开发中的java中的事务

    1. **使用编程式事务管理**:适用于需要细粒度控制的场景,如示例代码所示。 2. **使用声明式事务管理**:通过配置(如Spring框架的`@Transactional`注解)来管理事务,这种方式更为简洁。 3. **正确处理异常**:...

    JAVA100例之实例59 JAVA对事务的处理

    当我们谈论“JAVA对事务的处理”,我们通常是指如何在Java应用程序中管理和控制数据库事务。本实例59将深入探讨Java中事务的基本概念、特性以及如何通过Java API进行事务管理。 首先,事务是数据库操作的基本单位,...

    深入解析Java的Spring框架中的混合事务与bean的区分

    声明式事务基于AOP(面向切面编程),通过在方法上添加注解如`@Transactional`来控制事务的开始、提交或回滚。编程式事务则需要在代码中显式地调用`TransactionTemplate`或`PlatformTransactionManager`的相关方法...

    java模拟数据库事务

    Java模拟数据库事务主要涉及到几个关键知识点,这些知识点在软件开发中尤其在处理数据一致性与并发控制时至关重要。首先,我们来逐一深入理解这些技术。 1) **Socket编程**:Socket是网络通信的基础,它提供了进程...

    Spring控制Hibernate中的事务传播特性与隔离级别操作.docx

    总结来说,Spring通过HibernateTemplate和JdbcTemplate提供了便捷的数据库操作,并且能够灵活地控制事务的传播特性和隔离级别。这使得开发者可以更专注于业务逻辑,同时确保数据操作的正确性和一致性。在实际开发中...

Global site tag (gtag.js) - Google Analytics