设为首页 收藏本站
查看: 1143|回复: 0

[经验分享] Oracle-day01 下

[复制链接]

尚未签到

发表于 2018-9-5 10:29:41 | 显示全部楼层 |阅读模式
  三、项目案例:《自来水公司收费系统》
  (一)项目介绍与需求分析
  XXX   市自来水公司为更好地对自来水收费进行规范化管理,决定委托传智播客.黑马程序员开发《自来水公司收费系统》。考虑到自来水业务数量庞大,  数据并发量高,决定数据库采用       ORACLE       数据库。
  主要功能包括:
  1.、基础信息管理:
  (1)业主类型设置
  (2)价格设置
  (3)区域设置
  (4)收费员设置
  (5)地址设置
  2、业主信息管理:
  (1)业主信息维护
  (2)业主信息查询
  3、收费管理:
  (1)抄表登记
  (2)收费登记
  (3)收费记录查询
  (4)欠费用户清单
  4、统计分析:
  (1)收费日报单
  (2)收费月报表
  .......
  (二)表结构设计
DSC0000.jpg

DSC0001.jpg

DSC0002.jpg

  上述 7 张表的物理模型如下:
DSC0003.jpg

  (三)创建表空间
  

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

  解释:
  waterboss 为表空间名称
  datafile 用于设置物理文件名称
  size 用于设置表空间的初始大小
  autoextend on        用于设置自动增长,如果存储量超过初始大小,则开始自动扩容
  next 用于设置扩容的空间大小
  (四)创建用户
  


  
create user wateruser>  
default tablespace waterboss
  

  wateruser 为创建的用户名
  identified by 用于设置用户的密码
  default tablesapce        用于指定默认表空间名称
  (五)用户赋权
  

  
grant dba to wateruser
  

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

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

  数据类型:


  • 字符型  (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
      实例:
      创建业主表

  

create table t_owners (  
id number primary key, name varchar2(30), addressid number, housenumber varchar2(30), watermeter varchar2(30), adddate date,
  
ownertypeid number
  
);
  

  其它表的创建见资料“自来水收费系统建表语句.txt”
  (二)修改表


  • 增加字段语法:
  

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
  
)
  


  • 修改字段名语法:
  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
  

  (三)删除表
  语法:
  

  
DROP TABLE 表名称
  

  五、数据增删改(
  一)插入数据
  语法:
  INSERT        INTO 表名[(列名 1,列名 2,...)]VALUES(值 1,值 2,...)
  执行 INSERT 后一定要再执行 commit 提交事务向业主表插入数据:
DSC0004.jpg

  语句中的 sysdate 是系统变量用于获取当前日期,点击齿轮的图标后,再点击下图的绿×××标,此图标为 commit
DSC0005.jpg

  我们再次录入一条数据,语句如下:
  

  

  insert into T_OWNERS VALUES (2,'赵大侃',1,'2-3','9876',sysdate,1);commit;
  (二)修改数据
  语法:
  

  
UPDATE 表名 SET 列名 1=值 1,列名 2=值 2,....WHERE 修改条件;
  

  执行 UPDATE 后一定要再执行 commit 提交事务

  需求:将>  update T_OWNERS set adddate=adddate-3 where>
  (三)删除数据
  语法 1:
  DELETE FROM 表名        WHERE        删除条件;

  执行 DELETE 后一定要再执行 commit 提交事务需求:删除业主>  delete from T_OWNERS where>
  语法 2:
  

  
TRUNCATE        TABLE        表名称
  

  比较 truncat 与 delete 实现数据删除?


  • delete 删除的数据可以 rollback
  • delete 删除可能产生碎片,并且不释放空间
  • truncate 是先摧毁表结构,再重构表结构  六、JDBC 连接 ORACLE
      (一)创建工程,引入驱动包
      在下图目录中可以找到驱动包 ORACLE 的 JDBC 驱动包,拷贝到工程即可使用
    DSC0006.jpg


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

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

package cn.itcast.waterboss.dao;  
import java.sql.SQLException;
  
/**
  
*基本数据访问类
  
*@author Administrator
  
*
  
*/

  
public>  

  
//加载驱动
  
static{

  
try {>  
} 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.创建实体类
  

package cn.itcast.waterboss.entity;
import java.util.Date;  

  
/**
  
*业主实体类
  
*@author Administrator
  
*
  
*/

  
public>  


  
private Long>
  
private String name;//业主名称private Long addressid;//地址编号private String housenumber;//门牌号private String watermeter;//水表编号private Date adddate;//登记日期private Long ownertypeid;//业主类型>  

  
public Long getId() {

  
return>  
}

  
public void setId(Long>
  
this.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 类实现增删改
  

package cn.itcast.waterboss.dao;  

  
import java.sql.SQLException;
  
import cn.itcast.waterboss.entity.Owners;
  

  
/**
  
*业主数据访问类
  
*@author Administrator
  
*
  
*/

  
public>  

  
/**
  
*新增业主
  
*@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>  

  
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,>  
} catch (SQLException e) {
  

  
e.printStackTrace();
  
}finally {
  
BaseDao.closeAll(null, stmt, conn);
  
}
  
}
  

  
}
  

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

  执行命令后会在当前目录下生成一个叫 EXPDAT.DMP,此文件为备份文件。如果想指定备份文件的名称,则添加 file 参数即可,命令如下
  exp system/itcast file=文件名 full=y
  整库导入命令
  imp system/itcast full=y
  此命令如果不指定 file 参数,则默认用备份文件 EXPDAT.DMP 进行导入如果指定 file 参数,则按照 file 指定的备份文件进行恢复
  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_area
  用 tables 参数指定需要导出的表,如果有多个表用逗号分割即可按表导入
  imp wateruser/itcast file=a.dmp tables=t_account,a_area



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-563465-1-1.html 上篇帖子: postgres postgres_fdw; 下篇帖子: Oracle-day02 上
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表