本帖最后由 我是楠楠 于 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) 2.价格表(T_PRICETABLE) 3.区域表(T_AREA) 4.收费员表(T_OPERATOR) 5.地址表(T_ADDRESS) 6.业主表(T_OWNERS) 7.收费台账(T_ACCOUNT) 上述 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口出 |