1. 概述:
在jdbc的数据库操作中,一项事务是由一条或是多条表达式所组成的一个不可分割的工作单元。我们通过提交commit()或是回滚rollback()来结束事务的操作。关于事务操作的方法都位于接口java.sql.Connection中。
2. 特点:
★ 在jdbc中,事务操作缺省是自动提交。也就是说,一条对数据库的更新表达式代表一项事务操作,操作成功后,系统将自动调用commit()来提交,否则将调用rollback()来回滚。
★ 在jdbc中,可以通过调用setAutoCommit(false)来禁止自动提交。之后就可以把多个数据库操作的表达式作为一个事务,在操作完成后调用commit()来进行整体提交,倘若其中一个表达式操作失败,都不会执行到commit(),并且将产生响应的异常;此时就可以在异常捕获时调用rollback()进行回滚。这样做可以保持多次更新操作后,相关数据的一致性,示例如下:
try {
conn =
DriverManager.getConnection
("jdbc:oracle:thin:@host:1521:SID","username","userpwd";
conn.setAutoCommit(false);//禁止自动提交,设置回滚点
stmt = conn.createStatement();
stmt.executeUpdate(“alter table …”); //数据库更新操作1
stmt.executeUpdate(“insert into table …”); //数据库更新操作2
conn.commit(); //事务提交
}catch(Exception ex) {
ex.printStackTrace();
try {
conn.rollback(); //操作不成功则回滚
}catch(Exception e) {
e.printStackTrace();
}
}
★ jdbc API支持事务对数据库的加锁,并且提供了5种操作支持,2种加锁密度。
5种支持:
static int TRANSACTION_NONE = 0;
→禁止事务操作和加锁。
static int TRANSACTION_READ_UNCOMMITTED = 1;
→允许脏数据读写(dirty reads)、重复读写(repeatable reads)和影象读写(phntom
reads)
static int TRANSACTION_READ_COMMITTED = 2;
→禁止脏数据读写(dirty reads),允许重复读写(repeatable reads)和影象读写(phntom reads)
static int TRANSACTION_REPEATABLE_READ = 4;
→禁止脏数据读写(dirty reads)和重复读写(repeatable reads),允许影象读写(phntom reads)
static int TRANSACTION_SERIALIZABLE = 8;
→禁止脏数据读写(dirty reads)、重复读写(repeatable reads)和允许影象读写(phntom reads)
2种密度:
最后一项为表加锁,其余3~4项为行加锁。
脏数据读写(dirty reads):当一个事务修改了某一数据行的值而未提交时,另一事务读取了此行值。倘若前一事务发生了回滚,则后一事务将得到一个无效的值(脏数据)。
重复读写(repeatable reads):当一个事务在读取某一数据行时,另一事务同时在修改此数据行。则前一事务在重复读取此行时将得到一个不一致的值。
影象读写(phantomreads):当一个事务在某一表中进行数据查询时,另一事务恰好插入了满足了查询条件的数据行。则前一事务在重复读取满足条件的值时,将得到一个额外的“影象“值。
Jdbc根据数据库提供的缺省值来设置事务支持及其加锁,当然,也可以手工设置:
setTransactionIsolation(TRANSACTION_READ_UNCOMMITTED);
可以查看数据库的当前设置:
getTransactionIsolation()
需要注意的是,在进行受动设置时,数据库及其驱动程序必须得支持相应的事务操作操作才行。
上述设置随着值的增加,其事务的独立性增加,更能有效的防止事务操作之间的冲突;同时也增加了加锁的开销,降低了用户之间访问数据库的并发性,程序的运行效率也回随之降低。因此得平衡程序运行效率和数据一致性之间的冲突。一般来说,对于只涉及到数据库的查询操作时,可以采用TRANSACTION_READ_UNCOMMITTED方式;对于数据查询远多于更新的操作,可以采用TRANSACTION_READ_COMMITTED方式;对于更新操作较多的,可以采用TRANSACTION_REPEATABLE_READ;在数据一致性要求更高的场合再考虑最后一项,由于涉及到表加锁,因此会对程序运行效率产生较大的影响。
另外,在oracle中数据库驱动对事务处理的缺省值是TRANSACTION_NONE,即不支持事务操作,所以需要在程序中手动进行设置。
3. 小结
jdbc提供的对数据库事务操作的支持是比较完整的,通过事务操作可以提高程序的运行效率,保持数据的一致性
分享到:
相关推荐
综上所述,"jdbc连接数据库事务工厂模式"结合了JDBC的数据库操作、事务管理的实现以及工厂模式的设计思想,为数据库访问提供了更加灵活、可扩展的解决方案。通过工厂模式创建事务管理对象,可以在不修改原有代码的...
本篇将详细讲解如何使用JDBC对数据库进行查询。 首先,我们需要理解JDBC的基本工作流程,这通常包括以下步骤: 1. 加载驱动:在Java程序中,我们使用`Class.forName()`方法加载数据库驱动。例如,对于MySQL,我们...
(1)熟练掌握JDBC操作数据库的整个过程; (2)利用预处理语句操作数据库; (3)掌握可滚动和可更新的结果集的基本操作方法; (4)理解JDBC中实现事务处理的基本方法; (5)理解数据库连接池的基本原理和思想,...
为了方便开发者进行这些操作,Sun公司推出了一套标准的Java访问数据库的API——Java Database Connectivity(简称JDBC)。通过JDBC,Java程序可以连接多种类型的数据库,如MySQL、Oracle、SQL Server等。本文将详细...
它提供了一种规范,使得Java开发者能够使用标准的Java语句来执行SQL命令,从而实现对数据库的操作。这篇经验总结将深入探讨JDBC连接数据库的核心概念、步骤以及最佳实践。 ### 1. JDBC驱动类型 JDBC驱动分为四种...
Java Database Connectivity(JDBC)是Java编程语言中用于与各种类型数据库交互的一组接口和类。JDBC使得Java开发者能够编写可移植的代码来访问和处理数据库中的数据。本篇文章将深入探讨如何使用JDBC连接数据库,...
在Java世界里,JDBC是连接各种数据库的标准,无论你是使用MySQL、Oracle还是SQL Server,都可以通过JDBC进行操作。 **一、JDBC基本操作流程** 1. **加载驱动**:使用`Class.forName()`方法加载数据库驱动,例如`...
JDBC 3.0是该API的一个重要版本,它在JDBC 2.0的基础上进行了增强,提供了更多的功能和性能优化,以满足开发者对数据库操作的需求。 ### JDBC基础 1. **连接数据库**:JDBC的核心是建立与数据库的连接。通过`Class...
本教程“传智播客JDBC_完成对数据库的CRUD操作”主要涵盖了如何利用JDBC进行数据库的基本操作,包括创建(Create)、读取(Read)、更新(Update)和删除(Delete)数据。 一、创建(Create) 创建数据通常涉及到...
- JDBC提供对事务的支持,通过Connection的setAutoCommit()方法控制自动提交,以及commit()和rollback()方法管理事务。 6. **结果集处理** - ResultSet的next()方法移动到下一行,通过getter方法获取当前行的列值...
这个实验旨在帮助学生理解和掌握如何在Java环境中利用JDBC API连接、操作数据库。 在进行JDBC编程时,首先需要了解JDBC驱动程序的分类,包括类型1至类型4,其中类型4是纯Java实现的驱动,提供高效且直接的数据库...
JDBC 提供了多种方式来处理数据库的事务,包括使用 Connection 对象的 commit() 方法来提交事务,使用 rollback() 方法来回滚事务,还可以使用 setAutoCommit() 方法来设置自动提交模式。 JDBC 也提供了多种方式来...
通过JDBC,Java应用程序能够连接各种类型的数据库,执行查询、更新等操作。 在JDBC体系结构中,`DriverManager`类扮演着重要的角色。它是JDBC的管理层,位于用户和驱动程序之间。`DriverManager`的主要职责是跟踪...
JDBC还支持事务处理、批处理、结果集处理等多种高级功能,使得Java开发者能够构建高效、可靠的数据库应用程序。在实际开发中,通常会使用ORM框架如Hibernate或MyBatis,它们在JDBC的基础上提供更高级别的抽象,简化...
虽然JDBC提供了底层数据库访问,但现代开发更倾向于使用ORM(对象关系映射)框架,如Hibernate或MyBatis,它们简化了数据库操作,降低了代码的复杂性。 10. **安全性和最佳实践**: - 避免硬编码数据库凭据,使用...
以下是对JDBC实现数据库基本操作的详细说明: 1. **连接数据库** - 首先,需要引入JDBC驱动,这通常通过在代码中添加相应的`<dependency>`标签在Maven或Gradle构建文件中完成。 - 使用`Class.forName()`方法加载...
以下是对给定文件中提到的JDBC数据库连接模板代码的知识点详细解析。 ### JDBC概念 JDBC是一种用于执行SQL语句的Java API,它由一组用Java语言编写的类和接口组成。通过JDBC,开发者可以将SQL语句发送到几乎任何...
通过理解并熟练运用这些JDBC核心概念和操作步骤,开发者可以高效地在Java应用程序中实现与数据库的交互,无论是简单的CRUD操作还是复杂的查询和事务处理。在处理SqlServer这样的数据库时,需确保使用正确的JDBC驱动...