事务

作为逻辑处理的基本单位,对于数据库操作来说由一条或者多条sql语句来构成。当然还有针对非数据库操作的,如在计算机中设置的还原点即是一个非常好的应用。

对于事务的基本性质在还有一篇中有所叙述:SQL 事务及实例演示

oracle和sql server在事务上差别


sql server中的事务一般分为隐式事务、显式事务、自己主动提交事务。

自己主动事务:对于sql server来说,当client提交一条sql语句时,这时候sql
server都会自己主动启动一个事务;对于这种事务,在运行完sql语句后会自己主动提交。

显示事务:这也是比較常见的使用的事务;事实上实质上也就是在自己主动事务上,添加一个Begintran,conn.commit,end tran.

隐式事务:相比显示事务须要开启connection,隐式事务是默认开启事务的Begin和数据库连接的。当然后面还是要进行commit或rollback操作的。

而oracle的事务就没有这么如此丰富了,和sql server的隐式事务类似;无需开启conn和Begin,仅仅要在兴许操作进行commit或rollback操作。

事务提交的机制


先了解一些基础的概念,data buffer cache:相当于一块连接硬盘文件和oracle数据操作的快速仅仅读缓存。

SGA:在启动oracle实例后,在内存中开辟的一块内存空间,用于存放server的控制信息以及数据。

数据块:数据存储的基本单位。

当连接到数据库后,oracle为连接的用户创建独立的进程-影子进程,这个进程伴随用户的整个操作;

1.检查数据块

2.构造undo数据块

以此来回滚数据

3.生成redo日志

用于又一次操作的日志存放在log buffer cache中。

4.lgwr进程启动,提交事务并书写全部日志文件

java事务处理


TestDemo:结合位于java.sql以下的接口 PreparedStatement和oracle事务实现批量删除

经常用法:

int[]executeBatch():

将一批命令提交给数据库来运行,假设所有命令运行成功,则返回更新计数组成的数组。

voidsetString(int parameterIndex,

               String x):

将指定參数设置为给定Java String 值。在将此值发送给数据库时,驱动程序将它转换成一个 SQL VARCHAR 或 LONGVARCHAR 值。

Demo

/**删除用户-2014年8月11日18:19:04
* @userId 用户id数组
*/
publicBoolean DeleteUser(String[] userId){
//一个线程安全的可变字符串
StringBuffersb=new StringBuffer();
sb.append("deletefrom t_user where user_id =?");
Connectionconn=null;
PreparedStatementpsmt = null;
Booleanflag=false; conn=DButil.getConnection();
try {
//关闭自己主动提交事务
conn.setAutoCommit(false);
//创建一个 PreparedStatement 对象来将參数化的 SQL语句发送到数据库。
psmt= conn.prepareStatement(sb.toString());
//将一组參数加入到此 PreparedStatement 对象的批处理命令中。
for(inti =0 ;i<userId.length;i++){
psmt.setString(1,userId[i].trim());
psmt.addBatch();
} // 运行批量更新
psmt.executeBatch();
// 语句运行完成,提交本事务
conn.commit(); flag=true;
}catch (SQLException e) {
//TODO Auto-generated catch block
e.printStackTrace();
try{
conn.rollback();
}catch (SQLException e1) {
//TODO Auto-generated catch block
e1.printStackTrace();
}
} returnflag;
}

总结


总的来说,感觉还是对oracle非常多内部的机制了解的有限。前几天的设计模式讲课,也让想到这里的一些东西才有了这篇博客。仅仅能说是非常浅显的认知,oracle在事务这里的处理相比在事务的处理上本质还是一致的。 跨网络或进程间的数据通信,应该是粗粒度,而不是细粒度的。也就是说:client与数据库之间不应该频繁的交互,浪费资源;
或者进程间也是相同的道理.而数据库之间的事务处理也是这样一个思维的体现。

oracle事务处理及实例演示jdbc操作批量删除的更多相关文章

  1. Spring JDBC Framework详解——批量JDBC操作、ORM映射

    转自:https://blog.csdn.net/yuyulover/article/details/5826948 一.spring JDBC 概述 Spring 提供了一个强有力的模板类JdbcT ...

  2. mySql事务_ _Java中怎样实现批量删除操作(Java对数据库进行事务处理)?

      本文是记录Java中实现批量删除操作(Java对数据库进行事务处理),在开始之前先来看下面这样的一个页面图: 上面这张图片显示的是从数据库中查询出的出租信息,信息中进行了分页处理,然后每行的前面提 ...

  3. JDBC的批量插入操作

    在今天之前,当我遇到需要使用JDBC对数据库进行批量插入操作的时候,我使用的方法如下: ①使用Connection建立数据库连接: ②使用PreparedStatement提交SQL语句,将数据插入: ...

  4. JDBC操作数据库实例

    jdbc操作数据库实例 1.jdbc创建数据库 1.1 前提条件 1.拥有创建和删除表的权限 2.数据库已经启动,且可用 1.2 jdbc创建数据库表的步骤: 导包:导入需要进行数据库编程的 JDBC ...

  5. Entity Framework中的多个库操作批量提交、事务处理

    在Entity Framework 中使用SaveChanges()是很频繁的,单次修改或删除数据后调用SaveChanges()返回影响记录数. 要使用批量修改或者批量删除数据,就需要SaveCha ...

  6. jdbc mysql crud dao模型 sql注入漏洞 jdbc 操作大文件

    day17总结 今日内容 l JDBC 1.1 上次课内容总结 SQL语句: 1.外键约束:foreign key * 维护多个表关系! * 用来保证数据完整性! 2.三种关系: * 一对多: * 一 ...

  7. 实例演示使用RDIFramework.NET 框架的工作流组件进行业务流程的定义—请假申请流程-Web

    实例演示使用RDIFramework.NET 框架的工作流组件 进行业务流程的定义—请假申请流程-Web 参考文章: RDIFramework.NET — 基于.NET的快速信息化系统开发框架 — 系 ...

  8. 使用JdbcTemplate简化JDBC操作 实现数据库操作

    使用Spring JDBC框架方遍简单的完成JDBC操作,满足性能的需求且灵活性高. Spring JDBC框架由4个部分组成,即core.datasource.object.support. org ...

  9. 审核流(3)低调奢华,简单不凡,实例演示-SNF.WorkFlow--SNF快速开发平台3.1

    下面我们就从什么都没有,结合审核流进行演示实例.从无到有如何快速完美的实现,然而如此简单.低调而奢华,简单而不凡. 从只有数据表通过SNF.CodeGenerator代码生成器快速生成单据并与审核流进 ...

随机推荐

  1. call, apply, bind 区别

    #call, apply, bind 区别及模拟实现call apply bind 三者都可以用来改变this的指向,但是在用法上略有不同  首先说一下call和apply的区别 call和apply ...

  2. [bzoj4816][Sdoi2017]数字表格 (反演+逆元)

    (真不想做莫比乌斯了) 首先根据题意写出式子 ∏(i=1~n)∏(j=1~m)f[gcd(i,j)] 很明显的f可以预处理出来,解决 根据套路分析,我们可以先枚举gcd(i,j)==d ∏(d=1~n ...

  3. 第3节 mapreduce高级:10、11、分组求取topN

    只要修改OrderReducer.java的reduce方法,修改为: int i = 0;for(NullWritable nullWritable:values){ if(i>=2) bre ...

  4. 怎样从SpringMVC返回json数据

    Srping3中配置 maven依赖pom.xml 需要jackson库的依赖 <dependency> <groupId>org.codehaus.jackson</g ...

  5. 小甲鱼python疑难点

    1.python生成器 2.while 1: num = input('请输入一个整数(输入Q结束程序):') if num != 'Q': num = int(num) print('十进制 -&g ...

  6. odoo权限配置讲解2

    今天我们在来讲解一下odoo中配合使用公司开发的权限配置模块,简单配置odoo权限的操作说明 接着上篇讲到的,昨天我们只是做了一个简单的表单模型的筛选规则 今天来讲解一下如何在创建内贸报价单的时候,在 ...

  7. JDK的安装和环境变量配置

    1.安装JDK开发环境 下载网站: http://www.oracle.com/technetwork/java/javase/downloads/index.html 进入后选择Accept Lic ...

  8. 创建私有 Gems 源

    1.安装依赖 yum install gem -y gem install builder   2.安装.配置nginx的文件列表 添加/etc/nginx/default.d/mirrors.con ...

  9. hrbust 1840 (树状数组第k大) 删点使用

    小橙子 Time Limit: 2000 MS Memory Limit: 32768 K Total Submit: 2(2 users) Total Accepted: 1(1 users) Ra ...

  10. Linux下汇编语言学习笔记5 ---

    这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...