1、事务处理
1)事务和锁
当执行事务操作时(dml语句),oracle 会在被作用的表上加锁,防止其他用户改表的结构,只有当一个事务执行完了
锁解开了,其他用户才可以对这个表进行操作,这对于用户来说十分重要,避免同时操作同一个表。
2)回退事务
保存点(savepoint)是事务中的一点,用于取消部分事务,当结束事务后,会自动的删除该事务所定义的所有保存点。
当执行rollback时,通过指定保存点可以回退到指定的点,这对于操作人员来说作用十分大,因为当数据出错时,可以采用
回退事务,恢复到指定的状态。
设置保存点: savepoint a1; 回滚到指定的保存点:rollback to a1; 取消所有事务:rollback
3) 提交事务
当执行commit语句可以提交事务,当执行了commit语句后,会确认事务的变化、结束事务、删除保存点、释放锁,
当使用commit语句结束事务之后,其他会话将可以查看到事务变化后的新数据。
4) 只读事务
当只读事务开启后,查看的数据将不再显示后来更新的数据。这种事务在进行数据统计时最常用,这样可以避免统计期间,
后来更新的数据对统计结果的干扰。
设置只读事务:set transaction read only
2、java操作数据库
1)采用jdbc_odbc桥接方式,这个采用的是系统内置的驱动,不需要另外导入驱动包。
装载驱动类:Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
连接url: jdbc:odbc:DStest,其中DSTest为自己在本地配置的数据源。
创建数据源方法如下:
(1) 打开控制面版,选择管理工具
(2)选择数据源
(3)选择添加按钮
(4)在安装oracle的时候,系统自动注册了oracle数据源,点击oracle in OraHome92
(5)Data Source Name:随便取一个,Description:可以不填,TNS Service Name :点击下拉框,
选择安装数据库时,创建的数据库实例。
信息填完后,可以点击Test Connection 按钮测试是否链接成功。
(6)java操作代码
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class test {
public static void main(String[] args) {
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection conn=DriverManager.getConnection("jdbc:odbc:DStest","scott","netjava");
Statement st=conn.createStatement();
ResultSet set=st.executeQuery("select * from emp");
while(set.next()){
System.out.println("用户名:"+set.getString("ename"));
}
}catch (Exception e) {
e.printStackTrace();
}
}
}
(7) 执行结果
2)采用jdbc方式,这个需要导入oracle驱动包。
驱动类:Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
连接url: jdbc:oracle:thin:@localhost:1521:oracle
3)举例说明使用事务的必要性,比如在银行的转账系统中,从一个用户的余额中减去1000元,在另外一个用户增加
1000员,如果执行减法的语句执行成功,而执行加法的语句没有成功的话,那么意味着用户的钱凭空消失了,或者
反过来,那么银行就亏大了,这样的事情在现实生活中肯定是不可以让他发生的。要解决这样的问题,那么就得用到
事务处理机制,开启事务后,所有的sql语句,要么全部成功,要么全部失败。
4)采用jdbc来执行事务处理实现
java代码:
package com.champion.oracle;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
/**
* 连接oracle操作
*
* @author: 通信0905--沈冠军
* @time: 2011-5-7
*/
public class Conn2Oracle {
public static void main(String[] args) {
try {
// 创建驱动
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
// 用户名和密码
String userName = "scott";
String password = "netjava";
// 数据库连接url
String url = "jdbc:oracle:thin:@127.0.0.1:1521:oracle";
// 取得连接
Connection conn = DriverManager.getConnection(url, userName,
password);
// (1)设置自动提交为false,默认的为没执行一句sql,就提交一次
conn.setAutoCommit(false);
// 创建预编译对象
Statement smt = conn.createStatement();
// (2) 将SCOTT职工的工资减去100元;
smt.executeUpdate("update emp set sal=sal+100 where ename='SCOTT'");
// (3)制造一个异常
int i = 10 / 0;
// (4)给SMITH职工的工作添加100元
smt.executeUpdate("update emp set sal=sal-100 where ename='SMITH'");
// 查询工资
ResultSet set = smt
.executeQuery("select ename , sal from emp where ename='SCOTT' or ename='SMITH'");
//(5)提交事务
conn.commit();
while (set.next()) {
System.out.println("姓名:" + set.getString("ename") + " 工资:"
+ set.getInt("sal"));
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
说明:当注释掉(1)(2)(3)(4)(5),即只执行查询语句,查看职工的未修改前的工资,执行结果如下:
当注释掉 (1)(3)(5),即不执行事务处理,也没有异常,只执行SMITH的工资减少100,SCOTT的工资
添加100, 则执行的结果如下:
当注释掉(1)(5),即不开启事务处理,在两个更新语句之间有一个语句出现异常,执行后抛出异常,
再注释掉(1)(3)(5) , 执行结果如下:
可以看到,由于在两个更新语句之间有个i=10/0的异常抛出,在增加的语句执行成功后,执行i=10/0时,抛出
异常,程序结束,后面的减少语句执行失败,最终导致了这样的结果。
当全部不注释,即开启事务,程序也有异常,执行的时候抛出异常,再次注释掉(1)(2)(3)(4)(5)
即只执行查询操作,执行结果如下:
可以看到,虽然在执行过程出现了异常,但是两个职工的工资都不变,也就是两个更新语句都执行失败,
这就是事务的作用,由于第二个语句失败,所以全部语句都失败。
3、总节一下
用java执行oracle数据库和用java执行mysql数据唯一的区别就是连接url和所用的驱动类不同,同样的,java
操作其他数据库的原理一样,以前都没有用过事务,对事务的了解不是很多,通过这次的学习,对事务机制有了一的
了解,也知道哪些场合应该使用事务处理,哪些场合不用,最后的就是没有用过jdbc_odbc来操作,因为这个要置数
据源,在以前使用的mysql中,没有见过这种类型,所以,知识是很广泛的,只有多看多用多学,才可以拓宽自己视
野。
- 大小: 25.2 KB
- 大小: 16.4 KB
- 大小: 6.1 KB
- 大小: 14.7 KB
- 大小: 10.2 KB
- 大小: 8.2 KB
- 大小: 5 KB
- 大小: 5 KB
- 大小: 5.4 KB
- 大小: 5.1 KB
分享到:
相关推荐
### Oracle学习笔记知识点详解 #### 一、Oracle简介 Oracle是一家知名的软件公司,以其数据库管理系统闻名全球。该公司成立于1977年,总部位于美国加利福尼亚州。Oracle不仅提供数据库解决方案,还涉及中间件、...
Oracle学习笔记 Oracle学习笔记是李兴华老师编写的Oracle从入门到精通的学习笔记,涵盖了 Oracle 的多表查询、连接、组函数和分组统计等知识点。在本篇笔记中,李兴华老师详细介绍了多表查询的基本语法、左右连接...
Oracle学习笔记精华版是针对数据库管理系统Oracle的一份重要学习资源,涵盖了从基础概念到高级特性的全面知识。Oracle,作为全球广泛使用的大型企业级数据库系统,对于IT专业人员尤其是数据库管理员(DBA)来说,是...
Oracle学习笔记 以下是我这一周学习oracle整理的笔记,包括课堂的内容和自己看额外看的视频补充的一些内容,基本上囊括了所有oracle的基本知识。主要的形式是例子代码加代码解释加运行结果,我个人认为对于没有学习...
在Oracle学习笔记中,对安装卸载和配置的详尽讲解,不仅为学习者提供了操作指导,而且还涉及到了数据库管理的一些基础知识点。这些内容对于数据库管理员和开发人员来说都是十分重要的,因为它们是操作Oracle数据库的...
资源名称:Oracle学习笔记-日常应用、深入管理、性能优化内容简介:Oracle学习笔记-日常应用、深入管理、性能优化Oracle 11g是最具代表性的高端关系型数据库管理系统,它在世界各地的大型商务数据库应用系统中被广泛...
Oracle DBA 学习笔记 标题:Oracle DBA 学习笔记 描述:学习使用维护 Oracle 数据库数年,对认为值得记录的 Oracle 维护脚本进行记录总结,存起来,虽然今后开源是方向,但不可否认 Oracle 仍然非常有水平的,在...
以下是对Oracle学习笔记整理的主要知识点的详细说明: 1. **数据库选择**: 在决定使用哪种数据库时,通常需要考虑项目的规模、性能需求、安全性要求以及可用资源。Oracle数据库因其稳定性、可扩展性和高性能而被...
根据提供的信息,我们可以总结出以下Oracle数据库学习的关键知识点: ...以上是基于提供的内容整理出的Oracle学习笔记中的关键知识点。通过理解这些基础知识,可以更好地管理和操作Oracle数据库。
超详细Oracle学习笔记,详细记录了oracle的学习过程中遇到的各种问题及基础知识,适合初中级oracle使用人员学习参考。
第2章 数据库管理 第3章 数据库实例管理 第4章 数据库安全管理 第5章 数据库逻辑存储结构管理 第6章 数据库物理文件管理 第7章 数据库逻辑对象管理 第8章 常用数据操纵语言 第9章 备份和恢复数据库 第2篇 深入...
Oracle数据库是世界上最流行的数据库管理系统之一,它提供了丰富的特性和功能来优化数据管理和查询性能。本文主要探讨Oracle数据库的入门基础知识,特别是与索引相关的概念。 首先,我们要理解ROWID的概念。ROWID是...
Oracle 11g是最具代表性的高端关系型数据库管理系统,它在世界各地的大型商务数据库应用系统中被广泛应用。本书设计了大量的应用情景,介绍了数据库管理员和开发人员常用的管理、维护和优化Oracle 11g数据库的技术和...
### Oracle 学习笔记知识点概览 #### 一、Oracle 数据库系统参数查询与管理 在 Oracle 数据库的学习过程中,了解如何查看和管理数据库的系统参数是非常重要的。这些参数直接影响着数据库的性能和稳定性。 ##### ...
### ORACLE经典学习笔记知识点概览 #### 第一章 ORACLE 命令 本章节主要介绍了Oracle数据库中常用的命令及其使用方法。 1. **查看参数文件**: `Desc v$parameter` - 这个命令用于查看Oracle的参数文件信息,通过...
ORACLE学习笔记:日常应用、深入管理、性能优化.part1
全网最全的oracle学习笔记,oracle学习笔记,oracle,### 4、oracle的七个服务 ```sql 1、Oracle ORCL VSS Writer Service Oracle卷映射拷贝写入服务,VSS(Volume Shadow Copy Service)能够让存储基础设备(比如...