Oracle基础

Oracle

目录

Oracle 基础

  • ORACLE简介
  • ORACLE体系结构
  • 表空间,用户的创建
  • 数据的增删改,以及数据类型
  • JDBC连接ORACLE
  • 数据的导出与导入

Oracle 查询

Oracle 对象

Oralce 编程

1 Oracle 简介

ORACLE 数据库系统是美国 ORACLE 公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或

B/S 体系结构的数据库之一。

  • ORACLE 通常应用于大型系统的数据库产品

  • 作为一个关系数据库,它是一个

完备关系的产品;作为分布式数据库它实现了分布式处理功能。

Oracle 特点

  • 支持多用户、大事务量的事务处理
  • 数据安全性和完整性控制
  • 支持分布式数据处理
  • 可移植性

2 Oracle的体系结构

  • 数据库
  • 实例
  • 数据文件
  • 表空间
  • 用户

数据库

Oracle 数据库的概念和其它数据库不一

样,这里的数据库是一个操作系统只有一个库,Oracle 数据库是数据的物理存储。这就包括(数据文件 ORA 或者 DBF、控制文件、联机日志、参数文件)

实例

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

实例的作用,一台服务器可能需要多套ORACLE数据库,并且希望多套ORACLE之间不会互相冲突,ORACLE实例解决了这个问题,只需要安装实例即可

表空间

一个数据库在逻辑上被划分成一到若干个表空间,每个表空间包含了在逻辑上相关联的一组结构。

每个数据库至少有一个表空间(称之为 system 表空间)

每个表空间由同一磁盘上的一个或多个文件组成,这些文件叫数据文件(datafile)。一个数据文件只能属于一个表空间。

表空间为了便于管理又划分为段,区,数据块,磁盘块

数据文件

一个表空间可以由一个或多个数据文件组成,一个数据文件只能属于一个表空间。

一旦数据文件被加入到某个表空间后,就不能删除这个文件,如果要删除某个数据文件,只能删除其所属于的表空间才行。

数据文件是数据库的物理存储单位。数据库的数据是存储在表空间中的,

真正是在某一个或者多个数据文件中。

在这里插入图片描述

用户

用户是在表空间下建立的。用户登陆后只能看到和操作自己的表,ORACLE

的用户与 MYSQL 的数据库类似,每建立一个应用需要创建一个用户。

在这里插入图片描述

3 表空间,用户的创建

1 创建表空间

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

2 创建用户与用户授权

create user wateruser
identified by itcast
default tablespace waterboss
  • wateruser 为创建的用户名

  • identified by 用于设置用户的密码

  • default tablesapce 用于指定默认表空间名称

给用户 wateruser 赋予 DBA 权限后即可登陆

grant dba to wateruser

4 数据和表的操作,以及数据类型

1 Oracle 数据类型

字符型

  • CHAR : 固定长度的字符类型,最多存储 2000 个字节
  • VARCHAR2 :可变长度的字符类型,最多存储 4000 个字节
  • LONG : 大文本类型。最大可以存储 2 个 G

数值型

  • NUMBER : 数值类型

    • NUMBER(5) 最大可以存的数为 99999

      NUMBER(5,2) 最大可以存的数为 999.99

日期型

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

大数据类型

  • CLOB : 存储字符,最大可以存 4 个 G
  • BLOB:存储图像、声音、视频等二进制数据,最多可以存 4 个 G

2 表的操作

1 创建表

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

2 修改表

  • 修改表的字段
    • 增加字段
    • 修改字段
  • 修改字段名
  • 删除字段
    • 一个字段
    • 多个字段
ALTER TABLE T_OWNERS ADD
(
REMARK VARCHAR2(20),
OUTDATE DATE
)
-- 修改字段

ALTER TABLE 表名称 MODIFY(列名 1 类型 [DEFAULT 默认值],列名 1 类型
[DEFAULT 默认值]...)

-- 修改字段名称
ALTER TABLE 表名称 RENAME COLUMN 原列名 TO 新列名


-- 删除字段

--  删除1个字段
ALTER TABLE 表名称 DROP COLUMN 列名


--  删除1个字段
ALTER TABLE 表名称 DROP (列名 1,列名 2...)

3 删除表

DROP TABLE 表名称

3 **数据的操作 **和mysql 一样

1 插入数据

INSERT INTO 表名[(列名 1,列名 2,...)]VALUES(值 1,值 2,...)

2 修改数据

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

3 删除数据

方法一

DELETE FROM 表名 WHERE  删除条件;

TRUNCATE TABLE

TRUNCATE TABLE 表名称

区别

  1. delete 删除的数据可以 rollback,TRUNCATE 不可回滚 ,delete 删除数据实际上,是删除的数据挪到回滚段中,提交后才会将回滚段中删除的数据提交

  2. delete 删除可能产生碎片,并且不释放空间

  3. TRUNCATE是先摧毁表结构,再重构表结构,效率更高,

5 JDBC连接ORACLE

1 创建项目 watersystem

在这里插入图片描述

2 在lib中导入oracle jar包

jar包路径 C:\oracle\product\10.2.0\db_1\jdbc\lib

3 创建Base Dao 用于连接数据库,以及关闭资源

public class BaseDao {

    static{
        try {
            //1 加载驱动
            Class.forName("oracle.jdbc.driver.OracleDriver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

    }
    //获取连接
    public  static  Connection getConnnection() throws SQLException {
          //jdbc:oracle:thin:固定格式@主机号  , 用户名,密码
          return  DriverManager.getConnection("jdbc:oracle:thin:@主机号:1521:orcl","wateruser","itcast");

    }

    //关闭资源
    public  static void close(ResultSet rs, Connection connection, Statement statement){
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }

        if (connection != null) {
            try {
                connection.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }

        if (statement != null) {
            try {
                statement.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }

    }
}

4 创建实体类 Owners

public class Owners {


    private Long id;
    private String name;
    private Long address;
    private String housenumber; //门编号
    private String watermeter; //水表编号
    private Date adddate ; // 新增日期
    private Long ownertypeId; // 业主类型
    
}

5 创建操作表t_owners的 OwnersDao

public class OwnersDao {


    // 增加业主
    public static void  add(Owners owners){
        Connection conn= null;
        PreparedStatement stmt = null;


        try {
            conn = BaseDao.getConnnection();
            stmt = conn.prepareStatement("insert into T_OWNERS values(?,?,?,?,?,?,?)");
            stmt.setLong(1, owners.getId());
            stmt.setString(2, owners.getName());
            stmt.setLong(3, owners.getAddress());
            stmt.setString(4, owners.getHousenumber());
            stmt.setString(5, owners.getWatermeter());
            //将util date 转换为util date
            stmt.setDate(6, new java.sql.Date(owners.getAdddate().getTime()));
            stmt.setLong(7, owners.getOwnertypeId());
            stmt.execute();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } finally {
            BaseDao.close(null,conn,stmt);
        }
    }

    public static void  update(Owners owners){
        Connection conn= null;
        PreparedStatement stmt = null;


        try {
            conn = BaseDao.getConnnection();
            stmt = conn.prepareStatement("update T_OWNERS set name=?,addressid=?,housenumber=?,"
                    + "watermeter=?,adddate=?, ownertypeid=? where id=?");

            stmt.setString(1, owners.getName());
            stmt.setLong(2, owners.getAddress());
            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 throwables) {
            throwables.printStackTrace();
        } finally {
            BaseDao.close(null,conn,stmt);
        }
    }

    public static void  delete(Long id){
        Connection conn= null;
        PreparedStatement stmt = null;


        try {
            conn = BaseDao.getConnnection();
            stmt = conn.prepareStatement("delete  from  T_OWNERS where id = ?");
            stmt.setString(1, String.valueOf(id));
            stmt.execute();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } finally {
            BaseDao.close(null,conn,stmt);
        }
    }
}

6 测试

public class OracleTest {
    public static void main(String[] args) {
        Owners owners = new Owners();
        owners.setId(11L);
        owners.setName("王强2");
        owners.setAddress(1L);
        owners.setHousenumber("2-2");
        owners.setWatermeter("3456");
        owners.setAdddate(new Date());
        owners.setOwnertypeId(1L);
        OwnersDao.add(owners);
        OwnersDao.update(owners);
        OwnersDao.delete(11L);

    }
}

完整项目地址 Gitee https://gitee.com/nutxi/oracle-jdbc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值