JDBC处理transaction
来源:互联网 发布:linux文档下载 编辑:程序博客网 时间:2024/05/02 01:31
1. 什么是Transaction?所谓Transaction是指一系列不可分割的改动数据库的操作。在这个解释中,有三个关键词:一系列,不可分割以及改动。仅仅是一个改动数据库的操作是没有Transaction可言,只有“一系列”操作(一组SQL语句)才可能组成Transaction;“不可分割”就意味着一致性和完整性,要么这一系列操作全部commit(操作顺利完成的情况),要么就全部rollback(操作在某处失败的情况,让数据库回到我们对它进行的这一系列操作之前的状态);如果一系列的操作只包含enquiry(查询)操作,那么这些操作也不是Transaction。
2. 开发应用举例:银行转账,是不是要同时改变两个人的账户呢?
3. 在J2EE中,Transaction主要有几大类,具体有几种?在J2EE中,Transaction主要有Bean-Managed Transaction和Container-Managed Transaction两大类。其中在Bean-Managed Transaction中还会分为JDBC Transaction和JTA Transaction两种。
4. 什么是JDBC Transaction?它有怎样的特点?JDBC Transaction是指由Database本身去管理的事务。其最大的特点就是通过显示调用Connection接口的commit和rollback方法来完成事务的提交和回滚。事务结束的边界是commit或者rollback方法的调用,而开始的边界则不是那么明显了,它会开始于组成当前事务的所有statement中的第一个被执行的时候。具体代码如下:
//什么是Transaction?所谓Transaction是指一系列不可分割的改动数据库的操作
//下面的程序演示了JDBC如何对transaction进行处理
import java.sql.*;
public class TransactionTest {
public static void main(String[] args) {
Connection conn = null;
Statement stmt = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@198.168.0.1:1521:SXT","scott","tiger");
//默认情况下后面的三条insert语句结果会逐个插入数据库表中并自动提交,而我们的目的是保证它们能够同时提交而不是逐个提交
//第一步:把AutoCommit这一属性设置成false,不让它自动提交
conn.setAutoCommit(false); //Connection中有setAutoCommit这一属性,我们可以为其设定不同的参数(true or false)来规定是否自动提交
stmt = conn.createStatement();
stmt.addBatch("insert into dept values (1001,'game1','bj')");
stmt.addBatch("insert into dept values (1002,'game2','bj')");
stmt.addBatch("insert into dept values (1003,'game3','bj')");
stmt.executeBatch();
//既然我们没有使用默认的自动提交,那么就需要我们自己完成提交
conn.commit();
//提交完后在恢复默认
conn.setAutoCommit(true);
}
catch(ClassNotFoundException e) {
e.printStackTrace();
}
//catch到任何的SQLException,代表操作失败,那么记得必须在出现异常后要rollback,否则数据库可能被破坏
catch(SQLException e) {
e.printStackTrace();
try {
if(conn != null) {
conn.rollback();
//既然出现了异常,就更加不要忘了恢复默认
conn.setAutoCommit(true);
}
}
catch(SQLException e2) {
e.printStackTrace();
}
}
finally {
try {
if(stmt != null) {
stmt.close();
stmt = null;
}
if(conn != null) {
conn.close();
conn = null ;
}
}
catch(SQLException e) {
e.printStackTrace();
}
}
}
}
- JDBC处理Transaction
- JDBC处理transaction
- JDBC处理transaction
- JDBC Transaction
- Could not roll back JDBC transaction处理方法
- 05.JDBC编程之处理存储过程&Transaction
- JDBC and JTP Transaction
- JDBC Transaction example
- JDBC-Transaction(事务处理)
- JDBC笔记-Transaction
- JDBC Transaction 理解
- jdbc transaction事务处理
- JDBC Transaction 示例
- 【学习摘记】马士兵JDBC技术_课时13_JDBC处理Transaction
- JDBC回顾五Transaction事务处理
- Spring + jdbc +connection pool + transaction
- JDBC之Transaction(事务)
- Spring transaction处理技术
- U3D + KBE Demo环境搭建过程详细记录
- SQLite学习手册(表达式)
- RGraph-基于HTML5的 JavaScript 动态仪表盘
- SQLite学习手册(数据类型)
- LeetCode Populating Next Right Pointers in Each Node
- JDBC处理transaction
- mysql oracle mongodb 开源监控软件
- QC测试平台如何新建测试用例
- javaWeb中用Session控制表单重复提交(9)
- SQLite学习手册(命令行工具)
- IOS8 开发之Swift - 自学之路(第三天)
- 第一篇博客
- .clearfix:after(清除浮动)中各个属性及值详细解说
- 去除网页下方滚动条