A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 我是楠楠 于 2018-5-23 15:21 编辑

【郑州校区】Oracle-day01 下

三、项目案例:《自来水公司收费系统》
(一)项目介绍与需求分析
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
字段名
类型(位数)
是否必填
说明
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
NUMBER
门牌号
WATERMETER
VARCHAR2(30)
水表编号
ADDDATE
DATE
登记日期
OWNERTYPEID
NUMBER
业主类型 ID
7.收费台账(T_ACCOUNT
字段名
类型(位数)
是否必填
说明
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 张表的物理模型如下:

(三)创建表空间
[AppleScript] 纯文本查看 复制代码
create tablespace waterboss datafile 'c:\waterboss.dbf' size 100m
autoextend on next 10m

解释:
waterboss 为表空间名称
datafile 用于设置物理文件名称
size 用于设置表空间的初始大小
autoextend on        用于设置自动增长,如果存储量超过初始大小,则开始自动扩容
next 用于设置扩容的空间大小
(四)创建用户
[AppleScript] 纯文本查看 复制代码
create user wateruser identified by itcast
default tablespace waterboss


wateruser 为创建的用户名
identified by 用于设置用户的密码
default tablesapce        用于指定默认表空间名称
(五)用户赋权
[AppleScript] 纯文本查看 复制代码
grant dba to wateruser


给用户 wateruser 赋予 DBA 权限后即可登陆
四、表的创建、修改与删除(一)创建表

语法:
[AppleScript] 纯文本查看 复制代码
CREATE TABLE 表名称(
字段名 类型(长度) primary key,
字段名 类型(长度),
.......
);


数据类型:
1. 字符型
(1) CHAR :        固定长度的字符类型,最多存储 2000 个字节
(2) VARCHAR2        :可变长度的字符类型,最多存储 4000 个字节
(3) LONG : 大文本类型。最大可以存储 2 个 G
2.数值型
NUMBER : 数值类型
例如:NUMBER(5)        最大可以存的数为 99999
NUMBER(5,2)        最大可以存的数为 999.99
3.日期型
(1) DATE:日期时间型,精确到秒
(2) TIMESTAMP:精确到秒的小数点后 9 位
4.二进制型(大数据类型)
(1) CLOB : 存储字符,最大可以存 4 个 G
(2) BLOB:存储图像、声音、视频等二进制数据,最多可以存 4 个 G
实例:
创建业主表
[AppleScript] 纯文本查看 复制代码
create table t_owners (
id number primary key, name varchar2(30), addressid number, housenumber varchar2(30), watermeter varchar2(30), adddate date,
ownertypeid number
);


其它表的创建见资料“自来水收费系统建表语句.txt”
(二)修改表
1. 增加字段语法:
[AppleScript] 纯文本查看 复制代码
ALTER TABLE 表名称 ADD(列名 1 类型 [DEFAULT 默认值],列名 1 类型
[DEFAULT 默认值]...)

为业主表增加两个字段,语句:
[AppleScript] 纯文本查看 复制代码
--追加字段
ALTER TABLE T_OWNERS ADD (
REMARK VARCHAR2(20), OUTDATE DATE
)


2.修改字段语法:
[AppleScript] 纯文本查看 复制代码
ALTER TABLE 表名称 MODIFY(列名 1 类型 [DEFAULT 默认值],列名 1 类型
[DEFAULT 默认值]...)

修改两个字段的类型,语句:
[AppleScript] 纯文本查看 复制代码
--修改字段
ALTER TABLE T_OWNERS MODIFY (
REMARK CHAR(20), OUTDATE TIMESTAMP
)


3. 修改字段名语法:
[AppleScript] 纯文本查看 复制代码
ALTER TABLE 表名称 RENAME COLUMN 原列名 TO 新列名

语句:
[AppleScript] 纯文本查看 复制代码
ALTER TABLE T_OWNERS RENAME COLUMN OUTDATE TO EXITDATE


4.删除字段名
[AppleScript] 纯文本查看 复制代码
--删除一个字段
ALTER TABLE 表名称 DROP COLUMN 列名
--删除多个字段
ALTER TABLE 表名称 DROP (列名 1,列名 2...)

语句:
[AppleScript] 纯文本查看 复制代码
--删除字段
ALTER TABLE T_OWNERS DROP COLUMN REMARK
(三)删除表
语法:
[AppleScript] 纯文本查看 复制代码
DROP TABLE 表名称
五、数据增删改
一)插入数据
语法:

[AppleScript] 纯文本查看 复制代码
INSERT        INTO 表名[(列名 1,列名 2,...)]VALUES(值 1,值 2,...)

file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsAEA4.tmp.png
执行 INSERT 后一定要再执行 commit 提交事务向业主表插入数据:
语句中的 sysdate 是系统变量用于获取当前日期,点击齿轮的图标后,再点击下图的绿色图标,此图标为 commit
我们再次录入一条数据,语句如下:
[AppleScript] 纯文本查看 复制代码
insert into T_OWNERS VALUES (2,'赵大侃',1,'2-3','9876',sysdate,1);[/size][/font][/align][font=微软雅黑][size=3]commit;

(二)修改数据
语法:
[AppleScript] 纯文本查看 复制代码
UPDATE 表名 SET 列名 1=值 1,列名 2=值 2,....WHERE 修改条件;


执行 UPDATE 后一定要再执行 commit 提交事务
需求:将 ID 为 1 的业主的登记日期更改为三天前的日期
[AppleScript] 纯文本查看 复制代码
update T_OWNERS set adddate=adddate-3 where id=1;[/size][/font][/align][font=微软雅黑][size=3]commit;

(三)删除数据
语法 1:

[AppleScript] 纯文本查看 复制代码
DELETE FROM 表名        WHERE        删除条件;
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsAEBA.tmp.png
执行 DELETE 后一定要再执行 commit 提交事务需求:删除业主 ID 为 2 的业主信息
[AppleScript] 纯文本查看 复制代码
delete from T_OWNERS where id=2; commit;
语法 2:
[AppleScript] 纯文本查看 复制代码
TRUNCATE        TABLE        表名称
比较 truncat 与 delete 实现数据删除?
1. delete 删除的数据可以 rollback
2. delete 删除可能产生碎片,并且不释放空间
3. truncate 是先摧毁表结构,再重构表结构
六、JDBC 连接 ORACLE
(一)创建工程,引入驱动包
在下图目录中可以找到驱动包 ORACLE 的 JDBC 驱动包,拷贝到工程即可使用

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

build path
(二)BaseDao
我们通常编写 BaseDao 负责加载驱动,获取数据库连接,关闭资源,代码如下:
[AppleScript] 纯文本查看 复制代码
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();
}
}
}

}



JDBC 驱动为:
oracle.jdbc.OracleDriver
连接字符串( 瘦连接 ):
jdbc:oracle:thin:@虚拟机的 IP:1521:orcl
(三)业主增删改代码编写
1.创建实体类
[AppleScript] 纯文本查看 复制代码
package cn.itcast.waterboss.entity;[/size][/font][/align][font=微软雅黑][size=3]import java.util.Date;

/**
*业主实体类
*@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

public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Long getAddressid() {
return addressid;
}
public void setAddressid(Long addressid) {
this.addressid = addressid;
}
public String getHousenumber() {
return housenumber;
}
public void setHousenumber(String housenumber) {
this.housenumber = housenumber;
}
public String getWatermeter() {
return watermeter;
}
public void setWatermeter(String watermeter) {
this.watermeter = watermeter;
}
public Date getAdddate() {
return adddate;
}
public void setAdddate(Date adddate) {
this.adddate = adddate;
}
public Long getOwnertypeid() {
return ownertypeid;
}
public void setOwnertypeid(Long ownertypeid) {
this.ownertypeid = ownertypeid;
}
2.创建 Dao 类实现增删改
[AppleScript] 纯文本查看 复制代码
package cn.itcast.waterboss.dao;

import java.sql.SQLException;
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);
}
}

}

七、数据导出与导入
当我们使用一个数据库时,总希望数据库的内容是可靠的、正确的,但由于 计算机系统的故障(硬件故障、软件故障、网络故障、进程故障和系统故障)影 响数据库系统的操作,影响数据库中数据的正确性,甚至破坏数据库,使数据库 中全部或部分数据丢失。因此当发生上述故障后,希望能重构这个完整的数据库  该处理称为数据库恢复,而要进行数据库的恢复必须要有数据库的备份工作。
(一)整库导出与导入
整库导出命令
[AppleScript] 纯文本查看 复制代码
exp system/itcast full=y

添加参数 full=y 就是整库导出

file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsAEF9.tmp.png
执行命令后会在当前目录下生成一个叫 EXPDAT.DMP,此文件为备份文件。如果想指定备份文件的名称,则添加 file 参数即可,命令如下
[AppleScript] 纯文本查看 复制代码
exp system/itcast file=文件名 full=y
整库导入命令
[AppleScript] 纯文本查看 复制代码
imp system/itcast full=y


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

(二)按用户导出与导入按用户导出
[AppleScript] 纯文本查看 复制代码
exp system/itcast owner=wateruser file=wateruser.dmp

按用户导入
[AppleScript] 纯文本查看 复制代码
imp system/itcast        file=wateruser.dmp fromuser=wateruser
(三)按表导出与导入按表导出
[AppleScript] 纯文本查看 复制代码
exp wateruser/itcast file=a.dmp tables=t_account,a_area


用 tables 参数指定需要导出的表,如果有多个表用逗号分割即可按表导入
[AppleScript] 纯文本查看 复制代码
imp wateruser/itcast file=a.dmp tables=t_account,a_area

更多
【郑州校区】Oracle-day01 中
传智播客·黑马程序员郑州校区地址
河南省郑州市高新区长椿路11号大学科技园(西区)东门8号楼三层
联系电话0371-56061160 / 61/62
来校路线地铁一号线梧桐街站A口出

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马