oracle一

来源:互联网 发布:淘宝差评在哪里看 编辑:程序博客网 时间:2024/05/18 00:14

ORACLE 数据库
第 1 章
ORACLE 基础

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

(二)ORACLE体系结构

1.数据库
Oracle 数据库是数据的物理存储。这就包括(数据文件 ORA 或者 DBF、控制文件、联机日志、参数文件)。其实Oracle数据库的概念和其它数据库不一样,这里的数据库是一个操作系统只有一个库。可以看作是Oracle 就只有一个
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090大数据库。
2.实例一个Oracle实例 (Oracle Instance) 有一系列的后台进程 (Backguound Processes)和内存结构(Memory Structures)组成。一个数据库可以有 n 个实例。
3.数据文件(dbf数据文件是数据库的物理存储单位。数据库的数据是存储在表空间中的,真正是在某一个或者多个数据文件中。 而一个表空间可以由一个或多个数据文件组成, 一个数据文件只能属于一个表空间。 一旦数据文件被加入到某个表空间后,就不能删除这个文件,如果要删除某个数据文件,只能删除其所属于的表空间才行。
4.表空间表空间是Oracle对物理数据库上相关数据文件(ORA或者 DBF 文件)的逻辑映射。一个数据库在逻辑上被划分成一到若干个表空间,每个表空间包含了在逻辑上相关联的一组结构。每个数据库至少有一个表空间(称之为system表空)每个表空间由同一磁盘上的一个或多个文件组成,这些文件叫数据文件
(datafile)。一个数据文件只能属于一个表空间。注:表的数据,是有用户放入某一个表空间的,而这个表空间会随机把这
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090些表数据放到一个或者多个数据文件中。由于oracle的数据库不是普通的概念, oracle 是有用户和表空间对数据进行管理和存放的。但是表不是有表空间去查询的,而是由用户去查的。因为不同用户可以在同一个表空间建立同一个名字的表!这里区分就是用户了!
5.用户用户是在表空间下建立的。 用户登陆后只能看到和操作自己的表, ORACLE的用户与MYSQL的数据库类似,每建立一个应用需要创建一个用户。

二、ORACLE安装与配置
(一)VMware挂载windows server 2003打开“资源”文件夹中的windows2003 文件夹,双击扩展名为 vmx 的文件即可windows2003系统挂载到 VMware

(二)网络配置
1.创建虚拟网卡
VMware 中选择菜单“编辑”--“虚拟网络编辑器”弹出的窗口中,点击“添加网络”按钮,名称为VMnet2,确定
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090设置为仅主机方式,并设定子网IP192.168.80.0
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
2.设定虚拟操作系统的网络网卡
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090右键点击虚拟操作系统,选择“设置”菜单项,弹出以下窗口点击网络适配器,选择自定义,VMnet2
3.设定虚拟操作系统的IP地址在虚拟机的操作系统中设定IP 地址为 192.168.80.10
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090设置本地的操作系统的虚拟网卡VMnetIP 192.168.80.6
(与虚拟机中的操作系统的IP地址处于同一 IP 网段)
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090在本地操作系统打开命令行,用ping命令测试网络是否连接成功
(三)安装 ORACLE 数据库将“资源”文件夹ORACLE安装包解压拷贝到虚拟机的系统中并双击解压目录下的setup.exe,出现安装界面,如下:
输入口令和确认口令,如:itcast,点击下一步,出现如下进度条,
注:此口令即是管理员密码。
点击“下一步”,出现“概要”界面,点击“安装”。出现安装进度条,等待安装完成,如下图:
安装完成后,自动运行配置向导,如下图,等待其完成:完成后,出现“口令管理”界面,如下图:
点击“确定”,如下图:安装结束,点击“退出”。
此时可以命令提示符下进行测试安装结果输入:sqlplus system/itcast
itcast 为你安装时输入的密码

(四)SQLPlus远程连接ORACLE 数据库将“资源”文件夹中的instantclient_12_1拷贝到 D 盘根目录进入命令提示符,进入该目录,输入如下命令连接远程的ORACLE

(五)PLSQL Developer安装与配置1)安装 资源文件夹PLSQL+Developer10.0.3.1701注意事项:安装目录不能有中文和空格,否则连接不上将上边的目录改为D:\PLSQLDeveloper2)配置客户端路径在弹出的登陆窗口中,点取消,Tools->>Preferences
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-90903) 编辑ORA文件ORACLE 的以下安装目录中找到 tnsnames.ora文件, 拷贝到本地电脑的D盘根目录。打开tnsnames.ora文件编辑,修改下图红色方框处
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-90904) 设置环境变量TNS_ADMIND 盘根目录( tnsnames.ora所在目)(5)进入系统输入用户名system 密码 itcast 即可进入到软件主界面。
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-90906)中文编码设置查看服务器端编码 SQL:
select userenv('language') from dual我实际查到的结果为:AMERICAN_AMERICA.ZHS16GBK计算机->属性->高级系统设置->环境变量->新建设置变量名:NLS_LANG,变量值:第 1 步查到的值, 我的是AMERICAN_AMERICA.ZHS16GBK
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
三、项目案例:《自来水公司收费系统》
(一)项目介绍与需求分析
XXX 市自来水公司为更好地对自来水收费进行规范化管理,决定委托传智播客.黑马程序员开发《自来水公司收费系统》。考虑到自来水业务数量庞大,数据并发量高,决定数据库采用ORACLE数据库。主要功能包括:
1.、基础信息管理:1)业主类型设置2)价格设置3)区域设置4)收费员设置5)地址设置
2、业主信息管理:1)业主信息维护2)业主信息查询
3、收费管理:1)抄表登记2)收费登记3)收费记录查询4)欠费用户清单
4、统计分析:
1)收费日报单2)收费月报表
.......
(二)表结构设计
1.业主类型表(T_OWNERTYPE
字段名 类型(位数)是否必填 说明
ID NUMBER 是 主键
NAME VARCHAR2(30) 是 类型名称
2.价格表(T_PRICETABLE
字段名 类型(位数)是否必填 说明
ID NUMBER 是 主键
PRICE NUMBER(10,2) 是 价格
OWNERTYPEID NUMBER 是 业主类型 ID
MINNUM NUMBER(10,2) 是 区间数开始值
MAXNUM NUMBER(10,2) 是 区间数截止值
3.区域表(T_AREA
字段名 类型(位数)是否必填 说明
ID NUMBER 是 主键
NAME VARCHAR2(30) 是 区域名称
4.收费员表(T_OPERATOR
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
字段名 类型(位数)是否必填 说明
ID NUMBER 是 主键
NAME VARCHAR2(30) 是 操作员名称
5.地址表(T_ADDRESS
字段名 类型(位数)是否必填 说明
ID NUMBER 是 主键
NAME VARCHAR2(30) 是 地址名称
AREAID NUMBER 是 区域 ID
OPERATORID NUMBER 是 操作员 ID
6.业主表(T_OWNERS
字段名 类型(位数)是否必填 说明
ID NUMBER 是 主键
NAME VARCHAR2(30) 是 业主名称
ADDRESSID NUMBER 是 地址 ID
HOUSENUMBER VARCHAR2(30) 是 门牌号
WATERMETER VARCHAR2(30) 是 水表编号
ADDDATE DATE 是 登记日期
OWNERTYPEID NUMBER 是 业主类型 ID
7.收费台账(T_ACCOUNT
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
字段名 类型(位数)是否必填 说明
ID NUMBER 是 主键
OWNERID NUMBER 是 业主编号
OWNERTYPEID NUMBER 是 业主类型
AREAID NUMBER 是 所在区域
YEAR CHAR(4) 是 账务年份
MONTH CHAR(2) 是 账务月份
NUM0 NUMBER 上月累计数
NUM1 NUMBER 本月累计数
USENUM NUMBER 本月使用数
METERUSERID NUMBER 抄表员
METERDATE DATE 抄表日期
MONEY NUMBER(10,2) 应缴金额
ISFEE CHAR(1) 是 是否缴费
FEEDATE DATE 缴费日期
FEEUSERID NUMBER 收费员上述 7 张表的物理模型如下:

(三)创建表空间
create tablespacewaterboss
datafile 'c:\waterboss.dbf'
size 100m
autoextend on
next 10m解释:
waterboss 为表空间名称
datafile 用于设置物理文件名称
size 用于设置表空间的初始大小
au
toextend on 用于设置自动增长,如果存储量超过初始大小,则开始自动扩容
next 用于设置扩容的空间大小

(四)创建用户
create userwateruser
identified by itcast
default tablespace waterboss
wateruser为创建的用户名
identified by用于设置用户的密码
default tablesapce用于指定默认表空间名称
(五)用户赋权
grant dba to wateruser给用户wateruser赋予DBA权限后即可登陆
四、表的创建、修改与删除
(一)数据类型
1.字符型1CHAR : 固定长度的字符类型,最多存储2000个字节2VARCHAR2 :可变长度的字符类型,最多存储4000个字节3LONG : 大文本类型。最大可以存储2G
2.数值型
NUMBER :数值类型例如:NUMBER(5)最大可以存的数为99999
NUMBER(5,2)最大可以存的数为999.99
3.日期型
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-90901DATE:日期时间型,精确到秒2TIMESTAMP:精确到秒的小数点后9
4.二进制型(大数据类型)1CLOB : 存储字符,最大可以存4G2BLOB:存储图像、声音、视频等二进制数据,最多可以存4G
(二)创建表语法:
CREATE TABLE 表名称(
字段名 类型(长度),
字段名 类型(长度),
.......
);创建业主表
create table t_owners
(i
d number,
name varchar2(30),
addressid number,
housenumber varchar2(30),
watermeter varchar2(30),
adddate date,
ownertypeid number
);其它表的创建见资料“自来水收费系统建表语句.txt
(三)修改表
1. 增加字段语法:

ALTER TABLE 表名称
ADD (列名1类型[DEFAULT默认值],列名2类型[DEFAULT默认值] ...)为业主表增加两个字段,语句:
--追加字段
ALTER TABLE T_OWNERSADD
(
REMARK VARCHAR2(20),
OUTDATE DATE
) 2
. 修改字段语法:
ALTER TABLE 表名称
MODIFY(列名1类型[DEFAULT默认值],列名2类型[DEFAULT默认值]...)修改两个字段的类型,语句:
--修改字段
ALTER TABLE T_OWNERSMODIFY
(R
EMARK CHAR(20),
OUTDATE TIMESTAMP
) 3
. 修改字段名语法:
ALTER TABLE 表名称RENAME COLUMN原列名TO新列名语句:
ALTER TABLE T_OWNERSRENAME COLUMNOUTDATETOEXITDATE
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
4. 删除字段名
--删除一个字段
ALTER TABLE 表名称DROP COLUMN列名
--删除多个字段
ALTER TABLE 表名称DROP(列名1,列名2...)语句:
--删除字段
ALTER TABLE T_OWNERSDROP COLUMNREMARK
(四)删除表语法:
DROP TABLE 表名称
(五)约束
1.主键约束建表时在主键列后添加primary key ,例如我们创建业主类型表:
create table t_ownertype
(i
d number primary key,
name varchar2(30)
);如果表已经创建完成,也可以后添加主键约束,我们为业主表追加主键约束 ,语句如下:
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
alter table t_ownersadd primary key(id);
2.外键约束我们为业主表和业主类型表创建外键约束
alter table t_owners
add foreign key (ownertypeid)referencest_ownertype(id);关键字说明:
(1) FOREING KEY:该选项用于指定在表级定义外部键约束。
(2) REFERENCES:该选项用于指定主表名及其主键列。当定义外部键约束时,该选项必须指定。
3.非空约束我们为业主表t_owners的名称字段创建非空约束
alter table t_ownersmodify namenot null;
4.唯一约束我们为业主表t_owners的水表编号字段创建唯一约束
alter table t_ownersmodifywatermeterunique;
5.检查约束
alter table t_ownersmodifyaddressidcheck(addressid>0);
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
五、数据增删改
(一)插入数据语法:
INSERT INTO表名[(列名1,列名2...)]VALUES(1,值2...)执行INSERT后一定要再执行commit提交事务向业主表插入数据:
insert into T_OWNERSVALUES(1,'张 三 丰
'
,1,'2-2','5678',sysdate,1);语句中的sysdate是系统变量用于获取当前日期,点击齿轮的图标后,再点击下图的绿色图标,此图标为commit我们再次录入一条数据,语句如下:
insert into T_OWNERSVALUES(2,'赵大侃
',1,'2-3','9876',sysdate,1);
commit;
(二)修改数据语法:
UPDATE表名SET列名1=1,列名2=2....WHERE修改条件;执行UPDATE后一定要再执行commit提交事务
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090需求:将ID1的业主的登记日期更改为三天前的日期
update T_OWNERSsetadddate=adddate-3where id=1;
commit;
(三)删除数据语法1
DELETE FROM表名WHERE删除条件;执行DELETE后一定要再执行commit提交事务需求:删除业主ID2的业主信息
delete from T_OWNERSwhere id=2;
commit;语法2
TRUNCATE TABLE表名称比较truncatdelete实现数据删除?
1. delete删除的数据可以rollback
2. delete删除可能产生碎片,并且不释放空间
3. truncate是先摧毁表结构,再重构表结构

六、JDBC连接ORACLE
(一)创建工程,引入驱动包在下图目录中可以找到驱动包ORACLEJDBC驱动包,拷贝到工程即可使用创建java工程waterboss, 建立lib文件夹, 将ojdbc.jar拷贝到此文件夹, 然后add
build path
(二)BaseDao我们通常编写BaseDao负责加载驱动,获取数据库连接,关闭资源,代码如下:
packagecn.itcast.waterboss.dao;
importjava.sql.SQLException;
/**
* 基本数据访问类
* @authorAdministrator
**
/
public classBaseDao {
//加载驱动
static{
try {

Class.forName("oracle.jdbc.driver.OracleDriver");
} catch(ClassNotFoundExceptione) {
e.printStackTrace();
}
} /
**
* 获取数据库连接
* @return
* @throwsSQLException
*/
public staticjava.sql.Connection getConnection()throws
SQLException{
returnjava.sql.DriverManager.getConnection(
"jdbc:oracle:thin:@192.168.80.10:1521:orcl",
"wateruser","itcast");
} /
**
* 关闭资源
* @paramrs
* @paramstmt
* @paramconn
*/
public static voidcloseAll(java.sql.ResultSetrs,
java.sql.Statementstmt,java.sql.Connectionconn)
{
//关闭结果集
if(rs!=null){
try {
rs.close();
} catch(SQLExceptione) {
e.printStackTrace();
}
}/
/关闭执行对象
if(stmt!=null){
try {

stmt.close();
} catch(SQLExceptione) {
e.printStackTrace();
}
}/
/关闭执行对象
if(conn!=null){
try {
conn.close();
} catch(SQLExceptione) {
e.printStackTrace();
}
}
}
} JD
BC 驱动为:
oracle.jdbc.OracleDriver连接字符串(瘦连接)
jdbc:oracle:thin:@虚拟机的IP:1521:orcl
(三)业主增删改代码编写
1.创建实体类
packagecn.itcast.waterboss.entity;
importjava.util.Date;
/**
* 业主实体类
* @authorAdministrator
**
/
public classOwners {
privateLongid;//编号

privateStringname;//业主名称
privateLongaddressid;//地址编号
privateStringhousenumber;//门牌号
privateStringwatermeter;//水表编号
privateDateadddate;//登记日期
privateLongownertypeid;//业主类型ID
publicLong getId() {
returnid;
}p
ublic voidsetId(Longid) {
this.id=id;
}p
ublicString getName() {
returnname;
}p
ublic voidsetName(Stringname) {
this.name=name;
}p
ublicLong getAddressid() {
returnaddressid;
}p
ublic voidsetAddressid(Longaddressid) {
this.addressid=addressid;
}p
ublicString getHousenumber() {
returnhousenumber;
}p
ublic voidsetHousenumber(Stringhousenumber) {
this.housenumber=housenumber;
}p
ublicString getWatermeter() {
returnwatermeter;
}p
ublic voidsetWatermeter(Stringwatermeter) {
this.watermeter=watermeter;
}p
ublicDate getAdddate() {
returnadddate;
}p
ublic voidsetAdddate(Dateadddate) {
this.adddate=adddate;

}p
ublicLong getOwnertypeid() {
returnownertypeid;
}p
ublic voidsetOwnertypeid(Longownertypeid) {
this.ownertypeid=ownertypeid;
}
} 2
.创建Dao类实现增删改
packagecn.itcast.waterboss.dao;
importjava.sql.SQLException;
importcn.itcast.waterboss.entity.Owners;
/**
* 业主数据访问类
* @authorAdministrator
**
/
public classOwnersDao {
/**
* 新增业主
* @paramowners
*/
public static voidadd(Ownersowners){
java.sql.Connectionconn=null;
java.sql.PreparedStatementstmt=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(SQLExceptione) {
e.printStackTrace();
}finally{
BaseDao.closeAll(null,stmt,conn);
}
} /
**
* 修改业主
* @paramowners
*/
public static voidupdate(Ownersowners){
java.sql.Connectionconn=null;
java.sql.PreparedStatementstmt=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(SQLExceptione) {
e.printStackTrace();
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
}finally{
BaseDao.closeAll(null,stmt,conn);
}
} /
**
* 删除业主
* @paramowners
*/
public static voiddelete(Longid){
java.sql.Connectionconn=null;
java.sql.PreparedStatementstmt=null;
try {
conn=BaseDao.getConnection();
stmt=conn.prepareStatement("delete from T_OWNERS where
id=?");
stmt.setLong(1,id);
stmt.execute();
} catch(SQLExceptione) {
e.printStackTrace();
}finally{
BaseDao.closeAll(null,stmt,conn);
}
}
}
、数据导出与导入当我们使用一个数据库时,总希望数据库的内容是可靠的、正确的,但由于计算机系统的故障(硬件故障、软件故障、网络故障、进程故障和系统故障)影响数据库系统的操作,影响数据库中数据的正确性,甚至破坏数据库,使数据库
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090中全部或部分数据丢失。因此当发生上述故障后,希望能重构这个完整的数据库该处理称为数据库恢复,而要进行数据库的恢复必须要有数据库的备份工作。
(一)整库导出与导入整库导出命令
exp system/itcast full=y添加参数full=y就是整库导出执行命令后会在当前目录下生成一个叫EXPDAT.DMP,此文件为备份文件。如果想指定备份文件的名称,则添加file参数即可,命令如下
exp system/itcast file=文件名full=y整库导入命令
imp system/itcast full=y此命令如果不指定file参数,则默认用备份文件EXPDAT.DMP进行导入如果指定file参数,则按照file指定的备份文件进行恢复
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
imp system/itcast full=y file=water.dmp
(二)按用户导出与导入按用户导出
exp system/itcast owner=wateruser file=wateruser.dmp按用户导入
imp system/itcast file=wateruser.dmp fromuser=wateruser
(三)按表导出与导入按表导出
exp wateruser/itcast file=a.dmp tables=t_account,a_areatables参数指定需要导出的表,如果有多个表用逗号分割即可按表导入
imp wateruser/itcast file=a.dmp tables=t_account,a_area
八、总结
(一)知识点总结
(二)上机任务布置
1. 在虚拟机软件中挂载win7(模拟作为服务器使用),并配置网络,网络要ping2.在服务器中安装ORACLE.
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
3. 在本机安装 ORACLE客户端软件PL/SQL Developer ,并配置
4. 创建表空间、用户、赋权
5. DDL语句练习(创建表、修改表、删除表语句)
6. DML语句练习 (insertupdatedelete
7. 编写 JDBC连接ORACLE的代码
8. 数据导入导出练习

1.数据库
Oracle 数据库是数据的物理存储。这就包括(数据文件 ORA 或者 DBF、控制文件、联机日志、参数文件)。其实Oracle数据库的概念和其它数据库不一样,这里的数据库是一个操作系统只有一个库。可以看作是Oracle 就只有一个
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090大数据库。
2.实例一个Oracle实例 (Oracle Instance) 有一系列的后台进程 (Backguound Processes)和内存结构(Memory Structures)组成。一个数据库可以有 n 个实例。
3.数据文件(dbf数据文件是数据库的物理存储单位。数据库的数据是存储在表空间中的,真正是在某一个或者多个数据文件中。 而一个表空间可以由一个或多个数据文件组成, 一个数据文件只能属于一个表空间。 一旦数据文件被加入到某个表空间后,就不能删除这个文件,如果要删除某个数据文件,只能删除其所属于的表空间才行。
4.表空间表空间是Oracle对物理数据库上相关数据文件(ORA或者 DBF 文件)的逻辑映射。一个数据库在逻辑上被划分成一到若干个表空间,每个表空间包含了在逻辑上相关联的一组结构。每个数据库至少有一个表空间(称之为system表空)每个表空间由同一磁盘上的一个或多个文件组成,这些文件叫数据文件
(datafile)。一个数据文件只能属于一个表空间。注:表的数据,是有用户放入某一个表空间的,而这个表空间会随机把这
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090些表数据放到一个或者多个数据文件中。由于oracle的数据库不是普通的概念, oracle 是有用户和表空间对数据进行管理和存放的。但是表不是有表空间去查询的,而是由用户去查的。因为不同用户可以在同一个表空间建立同一个名字的表!这里区分就是用户了!
5.用户用户是在表空间下建立的。 用户登陆后只能看到和操作自己的表, ORACLE的用户与MYSQL的数据库类似,每建立一个应用需要创建一个用户。
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
二、ORACLE安装与配置
(一)VMware挂载windows server 2003打开“资源”文件夹中的windows2003 文件夹,双击扩展名为 vmx 的文件即可windows2003系统挂载到 VMware
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
(二)网络配置
1.创建虚拟网卡
VMware 中选择菜单“编辑”--“虚拟网络编辑器”弹出的窗口中,点击“添加网络”按钮,名称为VMnet2,确定
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090设置为仅主机方式,并设定子网IP192.168.80.0
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
2.设定虚拟操作系统的网络网卡
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090右键点击虚拟操作系统,选择“设置”菜单项,弹出以下窗口点击网络适配器,选择自定义,VMnet2
3.设定虚拟操作系统的IP地址在虚拟机的操作系统中设定IP 地址为 192.168.80.10
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090设置本地的操作系统的虚拟网卡VMnetIP 192.168.80.6
(与虚拟机中的操作系统的IP地址处于同一 IP 网段)
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090在本地操作系统打开命令行,用ping命令测试网络是否连接成功
(三)安装 ORACLE 数据库将“资源”文件夹ORACLE安装包解压拷贝到虚拟机的系统中并双击解压目录下的setup.exe,出现安装界面,如下:
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090输入口令和确认口令,如:itcast,点击下一步,出现如下进度条,
注:此口令即是管理员密码。
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090点击“下一步”,出现“概要”界面,点击“安装”。出现安装进度条,等待安装完成,如下图:
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090安装完成后,自动运行配置向导,如下图,等待其完成:完成后,出现“口令管理”界面,如下图:
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090点击“确定”,如下图:安装结束,点击“退出”。
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090此时可以命令提示符下进行测试安装结果输入:sqlplus system/itcast
itcast 为你安装时输入的密码
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
(四)SQLPlus远程连接ORACLE 数据库将“资源”文件夹中的instantclient_12_1拷贝到 D 盘根目录进入命令提示符,进入该目录,输入如下命令连接远程的ORACLE
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
(五)PLSQL Developer安装与配置1)安装 资源文件夹PLSQL+Developer10.0.3.1701注意事项:安装目录不能有中文和空格,否则连接不上将上边的目录改为D:\PLSQLDeveloper2)配置客户端路径在弹出的登陆窗口中,点取消,Tools->>Preferences
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-90903) 编辑ORA文件ORACLE 的以下安装目录中找到 tnsnames.ora文件, 拷贝到本地电脑的D盘根目录。打开tnsnames.ora文件编辑,修改下图红色方框处
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-90904) 设置环境变量TNS_ADMIND 盘根目录( tnsnames.ora所在目)(5)进入系统输入用户名system 密码 itcast 即可进入到软件主界面。
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-90906)中文编码设置查看服务器端编码 SQL:
select userenv('language') from dual我实际查到的结果为:AMERICAN_AMERICA.ZHS16GBK计算机->属性->高级系统设置->环境变量->新建设置变量名:NLS_LANG,变量值:第 1 步查到的值, 我的是AMERICAN_AMERICA.ZHS16GBK
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
三、项目案例:《自来水公司收费系统》
(一)项目介绍与需求分析
XXX 市自来水公司为更好地对自来水收费进行规范化管理,决定委托传智播客.黑马程序员开发《自来水公司收费系统》。考虑到自来水业务数量庞大,数据并发量高,决定数据库采用ORACLE数据库。主要功能包括:
1.、基础信息管理:1)业主类型设置2)价格设置3)区域设置4)收费员设置5)地址设置
2、业主信息管理:1)业主信息维护2)业主信息查询
3、收费管理:1)抄表登记2)收费登记3)收费记录查询4)欠费用户清单
4、统计分析:
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-90901)收费日报单2)收费月报表
.......
(二)表结构设计
1.业主类型表(T_OWNERTYPE
字段名 类型(位数)是否必填 说明
ID NUMBER 是 主键
NAME VARCHAR2(30) 是 类型名称
2.价格表(T_PRICETABLE
字段名 类型(位数)是否必填 说明
ID NUMBER 是 主键
PRICE NUMBER(10,2) 是 价格
OWNERTYPEID NUMBER 是 业主类型 ID
MINNUM NUMBER(10,2) 是 区间数开始值
MAXNUM NUMBER(10,2) 是 区间数截止值
3.区域表(T_AREA
字段名 类型(位数)是否必填 说明
ID NUMBER 是 主键
NAME VARCHAR2(30) 是 区域名称
4.收费员表(T_OPERATOR
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
字段名 类型(位数)是否必填 说明
ID NUMBER 是 主键
NAME VARCHAR2(30) 是 操作员名称
5.地址表(T_ADDRESS
字段名 类型(位数)是否必填 说明
ID NUMBER 是 主键
NAME VARCHAR2(30) 是 地址名称
AREAID NUMBER 是 区域 ID
OPERATORID NUMBER 是 操作员 ID
6.业主表(T_OWNERS
字段名 类型(位数)是否必填 说明
ID NUMBER 是 主键
NAME VARCHAR2(30) 是 业主名称
ADDRESSID NUMBER 是 地址 ID
HOUSENUMBER VARCHAR2(30) 是 门牌号
WATERMETER VARCHAR2(30) 是 水表编号
ADDDATE DATE 是 登记日期
OWNERTYPEID NUMBER 是 业主类型 ID
7.收费台账(T_ACCOUNT
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
字段名 类型(位数)是否必填 说明
ID NUMBER 是 主键
OWNERID NUMBER 是 业主编号
OWNERTYPEID NUMBER 是 业主类型
AREAID NUMBER 是 所在区域
YEAR CHAR(4) 是 账务年份
MONTH CHAR(2) 是 账务月份
NUM0 NUMBER 上月累计数
NUM1 NUMBER 本月累计数
USENUM NUMBER 本月使用数
METERUSERID NUMBER 抄表员
METERDATE DATE 抄表日期
MONEY NUMBER(10,2) 应缴金额
ISFEE CHAR(1) 是 是否缴费
FEEDATE DATE 缴费日期
FEEUSERID NUMBER 收费员上述 7 张表的物理模型如下:
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
(三)创建表空间
create tablespacewaterboss
datafile 'c:\waterboss.dbf'
size 100m
autoextend on
next 10m解释:
waterboss 为表空间名称
datafile 用于设置物理文件名称
size 用于设置表空间的初始大小
au
toextend on 用于设置自动增长,如果存储量超过初始大小,则开始自动扩容
next 用于设置扩容的空间大小
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
(四)创建用户
create userwateruser
identified by itcast
default tablespace waterboss
wateruser为创建的用户名
identified by用于设置用户的密码
default tablesapce用于指定默认表空间名称
(五)用户赋权
grant dba to wateruser给用户wateruser赋予DBA权限后即可登陆
四、表的创建、修改与删除
(一)数据类型
1.字符型1CHAR : 固定长度的字符类型,最多存储2000个字节2VARCHAR2 :可变长度的字符类型,最多存储4000个字节3LONG : 大文本类型。最大可以存储2G
2.数值型
NUMBER :数值类型例如:NUMBER(5)最大可以存的数为99999
NUMBER(5,2)最大可以存的数为999.99
3.日期型
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-90901DATE:日期时间型,精确到秒2TIMESTAMP:精确到秒的小数点后9
4.二进制型(大数据类型)1CLOB : 存储字符,最大可以存4G2BLOB:存储图像、声音、视频等二进制数据,最多可以存4G
(二)创建表语法:
CREATE TABLE 表名称(
字段名 类型(长度),
字段名 类型(长度),
.......
);创建业主表
create table t_owners
(i
d number,
name varchar2(30),
addressid number,
housenumber varchar2(30),
watermeter varchar2(30),
adddate date,
ownertypeid number
);其它表的创建见资料“自来水收费系统建表语句.txt
(三)修改表
1. 增加字段语法:
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
ALTER TABLE 表名称
ADD (列名1类型[DEFAULT默认值],列名2类型[DEFAULT默认值] ...)为业主表增加两个字段,语句:
--追加字段
ALTER TABLE T_OWNERSADD
(
REMARK VARCHAR2(20),
OUTDATE DATE
) 2
. 修改字段语法:
ALTER TABLE 表名称
MODIFY(列名1类型[DEFAULT默认值],列名2类型[DEFAULT默认值]...)修改两个字段的类型,语句:
--修改字段
ALTER TABLE T_OWNERSMODIFY
(R
EMARK CHAR(20),
OUTDATE TIMESTAMP
) 3
. 修改字段名语法:
ALTER TABLE 表名称RENAME COLUMN原列名TO新列名语句:
ALTER TABLE T_OWNERSRENAME COLUMNOUTDATETOEXITDATE
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
4. 删除字段名
--删除一个字段
ALTER TABLE 表名称DROP COLUMN列名
--删除多个字段
ALTER TABLE 表名称DROP(列名1,列名2...)语句:
--删除字段
ALTER TABLE T_OWNERSDROP COLUMNREMARK
(四)删除表语法:
DROP TABLE 表名称
(五)约束
1.主键约束建表时在主键列后添加primary key ,例如我们创建业主类型表:
create table t_ownertype
(i
d number primary key,
name varchar2(30)
);如果表已经创建完成,也可以后添加主键约束,我们为业主表追加主键约束 ,语句如下:
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
alter table t_ownersadd primary key(id);
2.外键约束我们为业主表和业主类型表创建外键约束
alter table t_owners
add foreign key (ownertypeid)referencest_ownertype(id);关键字说明:
(1) FOREING KEY:该选项用于指定在表级定义外部键约束。
(2) REFERENCES:该选项用于指定主表名及其主键列。当定义外部键约束时,该选项必须指定。
3.非空约束我们为业主表t_owners的名称字段创建非空约束
alter table t_ownersmodify namenot null;
4.唯一约束我们为业主表t_owners的水表编号字段创建唯一约束
alter table t_ownersmodifywatermeterunique;
5.检查约束
alter table t_ownersmodifyaddressidcheck(addressid>0);
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
五、数据增删改
(一)插入数据语法:
INSERT INTO表名[(列名1,列名2...)]VALUES(1,值2...)执行INSERT后一定要再执行commit提交事务向业主表插入数据:
insert into T_OWNERSVALUES(1,'张 三 丰
'
,1,'2-2','5678',sysdate,1);语句中的sysdate是系统变量用于获取当前日期,点击齿轮的图标后,再点击下图的绿色图标,此图标为commit我们再次录入一条数据,语句如下:
insert into T_OWNERSVALUES(2,'赵大侃
',1,'2-3','9876',sysdate,1);
commit;
(二)修改数据语法:
UPDATE表名SET列名1=1,列名2=2....WHERE修改条件;执行UPDATE后一定要再执行commit提交事务
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090需求:将ID1的业主的登记日期更改为三天前的日期
update T_OWNERSsetadddate=adddate-3where id=1;
commit;
(三)删除数据语法1
DELETE FROM表名WHERE删除条件;执行DELETE后一定要再执行commit提交事务需求:删除业主ID2的业主信息
delete from T_OWNERSwhere id=2;
commit;语法2
TRUNCATE TABLE表名称比较truncatdelete实现数据删除?
1. delete删除的数据可以rollback
2. delete删除可能产生碎片,并且不释放空间
3. truncate是先摧毁表结构,再重构表结构
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
六、JDBC连接ORACLE
(一)创建工程,引入驱动包在下图目录中可以找到驱动包ORACLEJDBC驱动包,拷贝到工程即可使用创建java工程waterboss, 建立lib文件夹, 将ojdbc.jar拷贝到此文件夹, 然后add
build path
(二)BaseDao我们通常编写BaseDao负责加载驱动,获取数据库连接,关闭资源,代码如下:
packagecn.itcast.waterboss.dao;
importjava.sql.SQLException;
/**
* 基本数据访问类
* @authorAdministrator
**
/
public classBaseDao {
//加载驱动
static{
try {
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch(ClassNotFoundExceptione) {
e.printStackTrace();
}
} /
**
* 获取数据库连接
* @return
* @throwsSQLException
*/
public staticjava.sql.Connection getConnection()throws
SQLException{
returnjava.sql.DriverManager.getConnection(
"jdbc:oracle:thin:@192.168.80.10:1521:orcl",
"wateruser","itcast");
} /
**
* 关闭资源
* @paramrs
* @paramstmt
* @paramconn
*/
public static voidcloseAll(java.sql.ResultSetrs,
java.sql.Statementstmt,java.sql.Connectionconn)
{
//关闭结果集
if(rs!=null){
try {
rs.close();
} catch(SQLExceptione) {
e.printStackTrace();
}
}/
/关闭执行对象
if(stmt!=null){
try {
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
stmt.close();
} catch(SQLExceptione) {
e.printStackTrace();
}
}/
/关闭执行对象
if(conn!=null){
try {
conn.close();
} catch(SQLExceptione) {
e.printStackTrace();
}
}
}
} JD
BC 驱动为:
oracle.jdbc.OracleDriver连接字符串(瘦连接)
jdbc:oracle:thin:@虚拟机的IP:1521:orcl
(三)业主增删改代码编写
1.创建实体类
packagecn.itcast.waterboss.entity;
importjava.util.Date;
/**
* 业主实体类
* @authorAdministrator
**
/
public classOwners {
privateLongid;//编号
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
privateStringname;//业主名称
privateLongaddressid;//地址编号
privateStringhousenumber;//门牌号
privateStringwatermeter;//水表编号
privateDateadddate;//登记日期
privateLongownertypeid;//业主类型ID
publicLong getId() {
returnid;
}p
ublic voidsetId(Longid) {
this.id=id;
}p
ublicString getName() {
returnname;
}p
ublic voidsetName(Stringname) {
this.name=name;
}p
ublicLong getAddressid() {
returnaddressid;
}p
ublic voidsetAddressid(Longaddressid) {
this.addressid=addressid;
}p
ublicString getHousenumber() {
returnhousenumber;
}p
ublic voidsetHousenumber(Stringhousenumber) {
this.housenumber=housenumber;
}p
ublicString getWatermeter() {
returnwatermeter;
}p
ublic voidsetWatermeter(Stringwatermeter) {
this.watermeter=watermeter;
}p
ublicDate getAdddate() {
returnadddate;
}p
ublic voidsetAdddate(Dateadddate) {
this.adddate=adddate;
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
}p
ublicLong getOwnertypeid() {
returnownertypeid;
}p
ublic voidsetOwnertypeid(Longownertypeid) {
this.ownertypeid=ownertypeid;
}
} 2
.创建Dao类实现增删改
packagecn.itcast.waterboss.dao;
importjava.sql.SQLException;
importcn.itcast.waterboss.entity.Owners;
/**
* 业主数据访问类
* @authorAdministrator
**
/
public classOwnersDao {
/**
* 新增业主
* @paramowners
*/
public static voidadd(Ownersowners){
java.sql.Connectionconn=null;
java.sql.PreparedStatementstmt=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());
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
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(SQLExceptione) {
e.printStackTrace();
}finally{
BaseDao.closeAll(null,stmt,conn);
}
} /
**
* 修改业主
* @paramowners
*/
public static voidupdate(Ownersowners){
java.sql.Connectionconn=null;
java.sql.PreparedStatementstmt=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(SQLExceptione) {
e.printStackTrace();
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
}finally{
BaseDao.closeAll(null,stmt,conn);
}
} /
**
* 删除业主
* @paramowners
*/
public static voiddelete(Longid){
java.sql.Connectionconn=null;
java.sql.PreparedStatementstmt=null;
try {
conn=BaseDao.getConnection();
stmt=conn.prepareStatement("delete from T_OWNERS where
id=?");
stmt.setLong(1,id);
stmt.execute();
} catch(SQLExceptione) {
e.printStackTrace();
}finally{
BaseDao.closeAll(null,stmt,conn);
}
}
}
、数据导出与导入当我们使用一个数据库时,总希望数据库的内容是可靠的、正确的,但由于计算机系统的故障(硬件故障、软件故障、网络故障、进程故障和系统故障)影响数据库系统的操作,影响数据库中数据的正确性,甚至破坏数据库,使数据库
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090中全部或部分数据丢失。因此当发生上述故障后,希望能重构这个完整的数据库该处理称为数据库恢复,而要进行数据库的恢复必须要有数据库的备份工作。
(一)整库导出与导入整库导出命令
exp system/itcast full=y添加参数full=y就是整库导出执行命令后会在当前目录下生成一个叫EXPDAT.DMP,此文件为备份文件。如果想指定备份文件的名称,则添加file参数即可,命令如下
exp system/itcast file=文件名full=y整库导入命令
imp system/itcast full=y此命令如果不指定file参数,则默认用备份文件EXPDAT.DMP进行导入如果指定file参数,则按照file指定的备份文件进行恢复
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
imp system/itcast full=y file=water.dmp
(二)按用户导出与导入按用户导出
exp system/itcast owner=wateruser file=wateruser.dmp按用户导入
imp system/itcast file=wateruser.dmp fromuser=wateruser
(三)按表导出与导入按表导出
exp wateruser/itcast file=a.dmp tables=t_account,a_areatables参数指定需要导出的表,如果有多个表用逗号分割即可按表导入
imp wateruser/itcast file=a.dmp tables=t_account,a_area
八、总结
(一)知识点总结
(二)上机任务布置
1. 在虚拟机软件中挂载win7(模拟作为服务器使用),并配置网络,网络要ping2.在服务器中安装ORACLE.
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
3. 在本机安装 ORACLE客户端软件PL/SQL Developer ,并配置
4. 创建表空间、用户、赋权
5. DDL语句练习(创建表、修改表、删除表语句)
6. DML语句练习 (insertupdatedelete
7. 编写 JDBC连接ORACLE的代码
8. 数据导入导出练习
0 0
原创粉丝点击