oracle(一)

一、ORACLE 简介

1.1什么是 ORACLE

ORACLE 数据库系统是美国 ORACLE 公司(甲骨文)提供的以 分布式 数据
库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或
B/S 体系结构的数据库之一。
ORACLE 通常应用于大型系统的数据库产品。
ORACLE 数据库是目前世界上使用最为广泛的数据库管理系统,作为一个通
用的数据库系统,它具有完整的数据管理功能;作为一个关系数据库,它是一个
完备关系的产品;作为分布式数据库它实现了 分布式 处理功能。
ORACLE 数据库具有以下特点:
(1)支持多用户、大事务量的事务处理
(2)数据安全性和完整性控制
(3)支持分布式数据处理
(4)可移植性
   

1.2ORACLE 体系结构

我们之前用的mysql图形化工具sqlyog小海豚,一个小油桶就是一个数据库,我们看到很多数据库(一个应用就会建立一个数据库)。oracle数据库是一个全局数据库。整个数据库就是一个数据库。

实例就是后台进程。你可以装一个oracle,但是你可以装多个实例,每个实例都有实例名,你连接这个实例名就是访问这个oracle,你连接那个实例名就是访问那个oracle。他就是吧oracle从磁盘当中读取到内存中,形成一股进程,每个进程之间是不会互相干预的,类似于你装了多个oracle。我们一般整个数据库装一个实例,很少会涉及到多实例的情况。

数据文件:就是存储数据的文件。oracle是通过表空间去管理这些数据文件。

表空间:就是一个或者多个数据文件的逻辑名称。一个数据文件有物理名称,比如adc.dbf,oracle中我们不会去直接操作dbf,而是操作表空间,表空间是对应着一个或多个数据文件。

表空间相当于mysql的一个库???

表空间就是吧oracle划分为很多区域,每个区域就是一个表空间,表空间下面有很多单位,表空间下面分为段,段下面分为区,区里面分为数据块,数据块里面分为磁盘块。

简而言之就是一个oracle数据库里面分为表空间,表空间下面分为段,段下面分为区,区里面分为数据块,数据块里面分为磁盘块。比如中国--》省--》市-->镇--》村。

用户:mysql的用户一登录就可以看到所有的数据库。oracle正好跟她相反,一个数据库下面有很多用户,在用户下面建立很多表,表是建立在用户上面的。

mysql和oracle的对应关系:

整个root用户下面的数据库就对应着一个oracle数据库。

oracle的用户对应着mysql数据库的概念。

用户、数据文件、表空间之间的关系。

实例之间是互不干扰的,用户有2个,LHB(李洪博),LSZ(李时珍)。

表空间与用户是一对多关系。实例和表空间和用户都是一对多的关系。

1.数据库

Oracle 数据库是数据的物理存储。这就包括(数据文件 ORA 或者 DBF 、控
制文件、联机日志、参数文件)。其实 Oracle 数据库的概念和其它数据库不一
样,这里的数据库是一个操作系统只有一个库。可以看作是 Oracle 就只有一个 大数据库。

2.实例

一个 Oracle 实例( Oracle Instance )有一系列的后台进程( Backguound Processes)
和内存结构( Memory Structures) 组成。一个数据库可以有 n 个实例。

3.数据文件(dbf

数据文件是数据库的物理存储单位。数据库的数据是存储在表空间中的,
真正是在某一个或者多个数据文件中。而一个表空间可以由一个或多个数据文件
组成,一个数据文件只能属于一个表空间。一旦数据文件被加入到某个表空间后,
就不能删除这个文件,如果要删除某个数据文件,只能删除其所属于的表空间才
行。

4.表空间

表空间是 Oracle 对物理数据库上相关数据文件( ORA 或者 DBF 文件)的逻
辑映射。一个数据库在逻辑上被划分成一到若干个表空间,每个表空间包含了在
逻辑上相关联的一组结构。每个数据库至少有一个表空间 ( 称之为 system 表空
)
每个表空间由同一磁盘上的一个或多个文件组成,这些文件叫数据文件
(datafile) 。一个数据文件只能属于一个表空间。
oracle(一)_第1张图片

注:表的数据,是有用户放入某一个表空间的,而这个表空间会随机把这些表数据放到一个或者多个数据文件中。
由于 oracle 的数据库不是普通的概念, oracle 是有用户和表空间对数据进行
管理和存放的。但是表不是有表空间去查询的,而是由用户去查的。因为不同用
户可以在同一个表空间建立同一个名字的表!这里区分就是用户了!
oracle(一)_第2张图片

5.用户

用户是在表空间下建立的。用户登陆后只能看到和操作自己的表 , ORACLE
的用户与 MYSQL 的数据库类似,每建立一个应用需要创建一个用户。
oracle(一)_第3张图片

二、ORACLE 安装与配置

2.1VMware 挂载 windows server 2003

oracle不建议安装到本机,安装比较麻烦,卸载更加麻烦。oracle装到虚拟机上,在虚拟机上安装一个操作系统,然后把oracle安装到该操作系统上。这个操作系统是windows server 2003,服务器版的操作系统,不是win7的。oracle服务器大都数都是装在服务器版操作系统,或者Linux操作系统,或者windows服务器版系统。

找到后缀vmx结尾的,双击它就可以挂载到VMware里面去了。

oracle(一)_第4张图片

oracle(一)_第5张图片

oracle(一)_第6张图片

“我已移动虚拟机”     //表示打开后的虚拟的网卡的mac地址不变,如果复制本地的,同时开机在一个vmnet可能造成冲突。

“我已复制虚拟机”     //表示打开后的虚拟机的网卡的物理地址是新生成的,建议不懂的就选这个。

“取消”                    //取消打开虚拟机

报错提示:

无法连接虚拟设备ide1:0,因为主机上没有相应的设备,您要在每次开启虚拟设备时都尝试连接此虚拟设备吗?

oracle(一)_第7张图片

这是因为没设置使用镜像文件。

选择虚拟机,再点击左侧页面编辑虚拟机设置。
选择CD/DVD(IDE) 将使用物理驱动器的选项改为下方的使用ISO映像文件,如图:

报错提示:

键盘挂钩超时值未设置为VMware Workstation建议的值

 oracle(一)_第8张图片

2.2网络配置

在安装数据库之前先配置网络,配置网络的本的是是使用本地计算机和windows server 2003处于一个局域网之内。

本地连接是物理网卡,vmware开头的是虚拟网卡。虚拟我网卡是专门连接虚拟机的网卡,虚拟机安装成功之后,会自动创建vmnet1网卡和vmnet8网卡。虚拟网卡我们是可以增加的。

oracle(一)_第9张图片

1.创建虚拟网卡---Vmware有三种网络工作模式

Vmware提供了三种网络工作模式,分别是:(1)Bridged(桥接模式);(2)NAT(网络地址转换模式);(3)Host-Only(仅主机模式)

桥接模式:你创建的虚拟机(虚拟机上的操作系统)和物理机(本地计算机)是处于同一局域网之下,能和该局域网下面的其它PC机相互通信,前提是必须要有外部的网络环境(本地计算机必须有网)。

仅主机模式:Host-Only模式将虚拟机与外网隔开,使得虚拟机成为一个独立的系统,只能与主机相互通讯。

NAT模式:虚拟机操作系统和本地计算机操作系统共享一个ip地址,你本地的计算机可以打开网页,你的虚拟机操作系统也可以打开网页,有个弊端就是你本地计算机无法与虚拟机操作系统进行网络连接,但是都可以上网。

我们一般选择仅主机模式;

VMware 中选择菜单“编辑”--“虚拟网络编辑器”

oracle(一)_第10张图片

弹出的窗口中,点击“添加网络”按钮,名称为 VMnet2 ,确定

oracle(一)_第11张图片

设置为仅主机方式,并设定子网 IP 192.168.80.0  (子网ip也可以不改)

 oracle(一)_第12张图片

 添加完之后,看一下虚拟网卡添加成功没有。把网络和internet打开。看到了vmnet2,右键属性,选择internet协议版本4,再点击属性,给你自动分配了ip地址,最后一个不是1就行,在255之内就可以了。这里改成了6.

oracle(一)_第13张图片

oracle(一)_第14张图片

oracle(一)_第15张图片

2.设定虚拟操作系统的网络网卡

右键点击虚拟操作系统,选择“设置”菜单项,弹出以下窗口

oracle(一)_第16张图片

点击网络适配器(默认是NAT模式),选择自定义, VMnet2(仅主机模式)--我们刚刚新建的vmnet2虚拟网卡
oracle(一)_第17张图片

3.设定虚拟操作系统的 IP 地址

因为我们的虚拟网卡是80网段,所以windows server 2003里面的操作系统也要改为80的。这样就可以在同一个局域网上进行通信了。

本地的操作系统的虚拟网卡 VMnet IP 为 192.168.80.6( 与虚拟机中的操作系统的 IP 地址处于同一 IP 网段 )

oracle(一)_第18张图片

 oracle(一)_第19张图片

oracle(一)_第20张图片

 ip地址改为10 ,不能是之前的6,6的话就会发生冲突了。一个网络的ip地址是不能重叠的。

在虚拟机的操作系统中设定 IP 地址为 192.168.80.10

oracle(一)_第21张图片

oracle(一)_第22张图片

网络都设置好了,里面虚拟机操作系统是 80.10,本地计算机操作系统是80.6,然后我们ping一下,本地计算机是否能与虚拟机上操作系统是否能联通。

oracle(一)_第23张图片

注意:高版本的windows serve的关闭防火墙,要不ping不通的。

2.3安装 ORACLE 数据库

直接将ORACLE 安装包解压拷贝到虚拟机的系统中,直接安装到虚拟机系统的C盘中。

oracle(一)_第24张图片

双击setup进行安装

oracle(一)_第25张图片

数据库口令的密码进行设置,口令用于超级管理员用户。

注:此口令即是管理员密码。

oracle(一)_第26张图片

 oracle(一)_第27张图片

oracle(一)_第28张图片

点击“下一步”,出现“概要”界面,点击“安装”。
oracle(一)_第29张图片

出现安装进度条,等待安装完成,如下图:
oracle(一)_第30张图片

安装完成后,自动运行配置向导,如下图,等待其完成:
oracle(一)_第31张图片

完成后,出现“口令管理”界面,如下图:
点击“确定”,如下图:
oracle(一)_第32张图片

安装结束,点击“退出”。
oracle(一)_第33张图片

此时可以命令提示符下进行测试安装结果
输入 :sqlplus system/itcast
itcast 为你安装时输入的密码
oracle(一)_第34张图片

oracle(一)_第35张图片

2.4SQLPlus 远程连接 ORACLE 数据库--dba用的(dos窗口)

找到instantclient_12_1 目录,

oracle(一)_第36张图片

oracle(一)_第37张图片

2.5PLSQL Developer 安装与配置--开发用的(图形化界面)

1 )安装 文件夹 PLSQL+Developer10.0.3.1701

找到PLSQL+Developer10.0.3.1701文件夹 并进行安装。

oracle(一)_第38张图片

 注意事项:安装目录不能有中文和空格,否则连接不上

将上边的目录改为 D:\PLSQLDeveloper
oracle(一)_第39张图片

一路next即可,安装成功之后,桌面上看到一个圆桐。双击它,需要输入破解版的东西。 

oracle(一)_第40张图片

注解玩之后,看到这个界面

oracle(一)_第41张图片

 2)配置客户端路径

oracle(一)_第42张图片

 在弹出的登陆窗口中,点取消,Tools->>Preferences

配置 oracle Home (insantclient 解压的路径)、 OCI Library(instantclient 目录下的oci.dll 文件))

oracle(一)_第43张图片

3 ) 编辑 ORA 文件---主要是配置本地得名
ORACLE 的以下安装目录中找到 tnsnames.ora 文件,拷贝到本地电脑的 D 盘根目录。
oracle(一)_第44张图片

就是根据ORCL10这个名称,去找192.168.80.10这个服务的orcl实例。

oracle(一)_第45张图片

注释:
ORCL10--代表连接的服务名,可以理解为一个代号
HOST 后填写数据库所在服务器的ip,PORT为数据库端口号,一般为1521
SERVICE_NAME 为数据库的实例名
4 ) 设置环境变量 TNS_ADMIN D 盘根目录 ( tnsnames.ora 所在目
)
TNS_ADMIN:配置oracle的监听
oracle(一)_第46张图片

oracle(一)_第47张图片

oracle(一)_第48张图片

oracle(一)_第49张图片

6)中文编码设置

查看服务器端编码 SQL:
select userenv('language') from dual
我实际查到的结果为:AMERICAN_AMERICA.ZHS16GBK
oracle(一)_第50张图片

计算机->属性->高级系统设置->环境变量->新建
设置变量名:NLS_LANG,变量值:第 1 步查到的值,
我的是
AMERICAN_AMERICA.ZHS16GBK

 oracle(一)_第51张图片

三、项目案例:《自来水公司收费系统》

3.1项目介绍与需求分析

XXX 市自来水公司为更好地对自来水收费进行规范化管理,决定委托传智
播客 . 黑马程序员开发《自来水公司收费系统》。考虑到自来水业务数量庞大,
数据并发量高,决定数据库采用 ORACLE 数据库。主要功能包括:
1. 、基础信息管理:
1 )业主类型设置
2 )价格设置
3 )区域设置
4 )收费员设置
5 )地址设置
2 、业主信息管理:
1 )业主信息维护
2 )业主信息查询
3 、收费管理:
1 )抄表登记
2 )收费登记
3 )收费记录查询
4 )欠费用户清单
4 、统计分析:
1 )收费日报单
2 )收费月报表
.......

3.2表结构设计

1.业主类型表(T_OWNERTYPE

oracle(一)_第52张图片

2. 价格表( T_PRICETABLE
oracle(一)_第53张图片

3. 区域表( T_AREA
oracle(一)_第54张图片

4. 收费员表( T_OPERATOR
oracle(一)_第55张图片

5. 地址表( T_ADDRESS
oracle(一)_第56张图片

6. 业主表( T_OWNERS
oracle(一)_第57张图片

7. 收费台账( T_ACCOUNT
oracle(一)_第58张图片

上述 7 张表的物理模型如下:
oracle(一)_第59张图片

3.3创建表空间--第一步

创建表空间,是我们做所有工作的第一步,因为你做的任何操作,都要找一个存储区域。创建表空间,实际上是创建数据文件。你创建表空间就是起一个名字,与此同时会产生一个数据文件,他们之间会自动产生对应关系。

先有表空间,再有用户。

create tablespace waterboss
datafile 'c:\waterboss.dbf'
size 100m
autoextend on
next 10m

解释:
waterboss 为表空间名称
datafile 用于设置物理文件名称
size 用于设置表空间的初始大小
autoextend on 用于设置自动增长,如果存储量超过初始大小,则开始自动扩容
next 用于设置扩容的空间大小
oracle(一)_第60张图片

oracle(一)_第61张图片

3.4创建用户

先有表空间,再有用户,然后才能建表。(用户是建在表空间上的,表是建立在用户上的)

create user wateruser
identified by itcast
default tablespace waterboss

wateruser 为创建的用户名
identified by 用于设置用户的密码
default tablesapce 用于指定默认表空间名称
oracle(一)_第62张图片

3.5用户赋权

grant dba to wateruser
给用户 wateruser 赋予 DBA 权限后即可登陆
oracle(一)_第63张图片

oracle(一)_第64张图片

四、表的创建、修改与删除

4.1创建表

oracle数据库创建表的前提,你先创建表空间,用户并为用户赋予权限,这些只需要创建一次即可,然后再去创建表。

语法:

CREATE TABLE 表名称(
 字段名 类型(长度) primary key,
 字段名 类型(长度),
 .......
);

数据类型:--4种

1. 字符型

1 CHAR : 固定长度的字符类型,最多存储 2000 个字节
2 VARCHAR2 : 可变长度的字符类型,最多存储 4000 个字节--mysql是varchar,oracle是varchar2
3 LONG : 大文本类型。最大可以存储 2 G---类似mysql的text类型,java中的long是整形

2.数值型

mysql数值型分的很细,int,long,double,float啥的,oracle就一个number,大小是用长度来表示。

NUMBER : 数值类型
例如: NUMBER(5) 最大可以存的数为 99999---代表这个数字是5位数,最多可以存99999
NUMBER(5,2) 最大可以存的数为 999.99---5代表总共5位,2代表小数位数是2位,最多可以存99999。小数位也是包含5位的里面的。

3.日期型

1 DATE :日期时间型,精确到秒
2 TIMESTAMP :精确到秒的小数点后 9

4.二进制型(大数据类型)

1 CLOB : 存储字符 , 最大可以存 4 G
2 BLOB :存储图像、声音、视频等二进制数据 , 最多可以存 4 G--常用
注意:CLOB类似其实就是弥补long类型,因为他最大存储2g的。
实例:
创建业主表
create table t_owners
(
id number primary key,
name varchar2(30),
addressid number,
housenumber varchar2(30),
watermeter varchar2(30),
adddate date,
ownertypeid number
);
其它表的创建见资料“自来水收费系统建表语句 .txt
oracle(一)_第65张图片

4.2修改表---命令化和图形化2种方式

1. 增加字段语法 :
ALTER TABLE 表名称 ADD(列名 1 类型 [DEFAULT 默认值],列名 1 类型
[DEFAULT 默认值]...)

为业主表增加两个字段,语句:
--追加字段
ALTER TABLE T_OWNERS ADD
(
 REMARK VARCHAR2(20),
 OUTDATE DATE
)

2. 修改字段语法:
ALTER TABLE 表名称 MODIFY(列名 1 类型 [DEFAULT 默认值],列名 1 类型
[DEFAULT 默认值]...)
修改两个字段的类型,语句:
--修改字段
ALTER TABLE T_OWNERS MODIFY
(
REMARK CHAR(20),
OUTDATE TIMESTAMP
)

3. 修改字段名语法:
ALTER TABLE 表名称 RENAME COLUMN 原列名 TO 新列名
语句:
ALTER TABLE T_OWNERS RENAME COLUMN OUTDATE TO EXITDATE

4. 删除字段名
--删除一个字段
ALTER TABLE 表名称 DROP COLUMN 列名
--删除多个字段
ALTER TABLE 表名称 DROP (列名 1,列名 2...)
语句:
--删除字段
ALTER TABLE T_OWNERS DROP COLUMN REMARK

4.3删除表

语法:
DROP TABLE 表名称

注意:

1.sql语句一般都大写,但是不区分大小写。

2.类似一般不会修改的,基本上都是子啊需求确定后创建表字段和类型。

在columns中我们看到数字123是number类型,abc是字符串类型,dat是日期类型。

oracle(一)_第66张图片

oracle(一)_第67张图片

oracle(一)_第68张图片

 oracle(一)_第69张图片

oracle(一)_第70张图片

 oracle(一)_第71张图片

五、数据增删改---记得加上commit提交,再去执行

5.1插入数据

mysql数据库事务不用自己操作,人家封装好的,oracle的话需要进行commit提交。

语法:

INSERT INTO 表名[(列名 1,列名 2,...)]VALUES(值 1,值 2,...)
执行 INSERT 后一定要再执行 commit 提交事务
向业主表插入数据:
insert into T_OWNERS VALUES (1,' 张三丰',1,'2-2','5678',sysdate,1);
语句中的 sysdate 是系统变量用于获取当前日期,点击齿轮的图标后,再点击下
图的绿色图标,此图标为 commit,红色图标为rollback回滚

我们再次录入一条数据,语句如下 :
insert into T_OWNERS VALUES (2,'赵大侃',1,'2-3','9876',sysdate,1);
commit;

5.2修改数据

语法:

UPDATE 表名 SET 列名 1=值 1,列名 2=值 2,....WHERE 修改条件;
执行 UPDATE 后一定要再执行 commit 提交事务
需求:将 ID 1 的业主的登记日期更改为三天前的日期
update T_OWNERS set adddate=adddate-3 where id=1;
commit;

5.3删除数据

语法 1 :delete删除需要commit提交,在执行
DELETE FROM 表名 WHERE 删除条件;

执行 DELETE 后一定要再执行 commit 提交事务
需求:删除业主 ID 2 的业主信息
delete from T_OWNERS where id=2;
commit;
语法 2 :truncate删除,不需要commit提交,在执行
TRUNCATE TABLE 表名称

比较 truncat delete 实现数据删除?
1. delete 删除的数据可以 rollback
2. delete 删除可能产生碎片,并且不释放空间
3. truncate 是先摧毁表结构,再重构表结构
oracle(一)_第72张图片

六、JDBC 连接 ORACLE

6.1创建工程,引入驱动包

在下图目录中可以找到驱动包 ORACLE JDBC 驱动包,拷贝到工程即可使用

oracle(一)_第73张图片

oracle(一)_第74张图片

创建 java 工程 waterboss,建立 lib 文件夹,将 ojdbc.jar 拷贝到此文件夹,然后 add  build path

oracle(一)_第75张图片

6.2BaseDao

我们通常编写 BaseDao 负责加载驱动,获取数据库连接,关闭资源,代码如下:

package cn.itcast.waterboss.dao;
import java.sql.SQLException;

/**
 * 基本数据访问类
 *
 * @author Administrator
 */
public class BaseDao {
    //加载驱动
    static {
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    /**
     * 获取数据库连接
     *
     * @return
     * @throws SQLException
     */
    public static java.sql.Connection getConnection() throws
            SQLException {
        return java.sql.DriverManager.getConnection(
                "jdbc:oracle:thin:@192.168.80.10:1521:orcl",
                "wateruser", "itcast");
    }

    /**
     * 关闭资源
     *
     * @param rs
     * @param stmt
     * @param conn
     */
    public static void closeAll(java.sql.ResultSet rs,
                                java.sql.Statement stmt, java.sql.Connection conn) {
//关闭结果集
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
//关闭执行对象
        if (stmt != null) {
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
//关闭执行对象
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

6.3业主增删改代码编写

1.创建实体类

/**
 * 业主实体类
 * @author Administrator
 *
 */
public class Owners {
    private Long id;//编号
    private String name;//业主名称
    private Long addressid;//地址编号
    private String housenumber;//门牌号
    private String watermeter;//水表编号
    private Date adddate;//登记日期
    private Long ownertypeid;//业主类型 ID
    //省略get,set方法
    }
2. 创建 Dao 类实现增删改
import cn.itcast.waterboss.entity.Owners;

/**
 * 业主数据访问类
 *
 * @author Administrator
 */
public class OwnersDao {
    /**
     * 新增业主
     *
     * @param owners
     */
    public static void add(Owners owners) {
        java.sql.Connection conn = null;
        java.sql.PreparedStatement stmt = null;
        try {
            conn = BaseDao.getConnection();
            //有几列就添加几个问号???
            stmt = conn.prepareStatement("insert into T_OWNERS 
                    values( ?, ?,?,?,?,?,?)");
            stmt.setLong(1, owners.getId());
            stmt.setString(2, owners.getName());
            stmt.setLong(3, owners.getAddressid());
            stmt.setString(4, owners.getHousenumber());
            stmt.setString(5, owners.getWatermeter());
            stmt.setDate(6, new
                    java.sql.Date(owners.getAdddate().getTime()));
            stmt.setLong(7, owners.getOwnertypeid());
            stmt.execute();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            BaseDao.closeAll(null, stmt, conn);
        }
    }

    /**
     * 修改业主
     *
     * @param owners
     */
    public static void update(Owners owners) {
        java.sql.Connection conn = null;
        java.sql.PreparedStatement stmt = null;
        try {
            conn = BaseDao.getConnection();
            stmt = conn.prepareStatement("update T_OWNERS set 
                    name = ?, addressid =?,housenumber =?,"
                    + "watermeter=?,adddate=?, ownertypeid=? where 
            id =?");
            stmt.setString(1, owners.getName());
            stmt.setLong(2, owners.getAddressid());
            stmt.setString(3, owners.getHousenumber());
            stmt.setString(4, owners.getWatermeter());
            stmt.setDate(5, new
                    java.sql.Date(owners.getAdddate().getTime()));
            stmt.setLong(6, owners.getOwnertypeid());
            stmt.setLong(7, owners.getId());
            stmt.execute();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            BaseDao.closeAll(null, stmt, conn);
        }
    }

    /**
     * 删除业主
     *
     * @param owners
     */
    public static void delete(Long id) {
        java.sql.Connection conn = null;
        java.sql.PreparedStatement stmt = null;
        try {
            conn = BaseDao.getConnection();

            stmt = conn.prepareStatement("delete from T_OWNERS where 
                    id = ? ");
            stmt.setLong(1, id);
            stmt.execute();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            BaseDao.closeAll(null, stmt, conn);
        }
    }
}

七、数据导出与导入---3种方式

当我们使用一个数据库时,总希望数据库的内容是可靠的、正确的,但由于
计算机系统的故障(硬件故障、软件故障、网络故障、进程故障和系统故障)影
响数据库系统的操作,影响数据库中数据的正确性,甚至破坏数据库,使数据库
中全部或部分数据丢失。因此当发生上述故障后,希望能重构这个完整的数据库
该处理称为数据库恢复,而要进行数据库的恢复必须要有数据库的备份工作。
数据库的导入和导出就做2件事,一个是做数据的迁移,一个是做数据的备份恢复。

7.1整库导出与导入

整库导出命令(整库导出有2种方式,一种是默认的文件名EXPDAT.DMP,一种是指定的文件file=文件名)

exp system/itcast full=y
添加参数 full=y 就是整库导出
执行命令后会在当前目录下生成一个叫 EXPDAT.DMP ,此文件为备份文件。
EXPDAT.DMP这个文件是二进制的,你是看不了的,这个数据格式只有oracle自己能认识。
oracle(一)_第76张图片

oracle(一)_第77张图片

如果想指定备份文件的名称,则添加 file 参数即可,命令如下
exp system/itcast file=文件名 full=y
oracle(一)_第78张图片

整库导入命令
导入的规则就是如果你的对象是存在的,他会自动跳过,它是检测对象是否存在。如果对象存在,它会自动的跳入过去,如果对象不存在,则会。。
按用户导入,先把表给删掉,然后再导入,然后再刷新就可以看到导入的表
imp system/itcast full=y

oracle(一)_第79张图片

oracle(一)_第80张图片

 oracle(一)_第81张图片

oracle(一)_第82张图片

 oracle(一)_第83张图片

此命令如果不指定 file 参数,则默认用备份文件 EXPDAT.DMP 进行导入
如果指定 file 参数,则按照 file 指定的备份文件进行恢复
imp system/itcast full=y file=water.dmp

7.2按用户导出与导入

按用户导出:

按用户导出实际上就是加了owner =用户名这个参数。就可以吧指定下的用户所有的表都导成一个文件里面。

exp system/itcast owner=wateruser file=wateruser.dmp
oracle(一)_第84张图片

oracle(一)_第85张图片

按用户导入:
按用户导入,先把表给删掉,然后再导入,然后再刷新就可以看到导入的表
imp system/itcast file=wateruser.dmp fromuser=wateruser

oracle(一)_第86张图片

 oracle(一)_第87张图片

oracle(一)_第88张图片

7.3按表导出与导入--根据用户来找表

按表导出:

按表导出就是添加tables参数,注意,我们的表是属于某个用户下的,exp后面需要跟着用户的身份来登录。而不是用system,用system,你是找不到这2个表的,t_account和a_area的。也就是根据用户来找表

exp wateruser/itcast file=a.dmp tables=t_account,a_area
tables 参数指定需要导出的表,如果有多个表用逗号分割即可
按表导入
imp wateruser/itcast file=a.dmp tables=t_account,a_area

oracle(一)_第89张图片

oracle(一)_第90张图片

 oracle(一)_第91张图片

oracle(一)_第92张图片

你可能感兴趣的:(java,数据库,oracle,数据库,dba)