【Oracle】Oracle的安装与连接

发布时间:2024年01月11日

Oracle基础

一、ORACLE 简介

1、oracle概述

ORACLE 数据库系统以分布式数据库为核心的一组软件产品

  1. 支持多用户、大事务量的事务处理
  2. 数据安全性和完整性控制
  3. 支持分布式数据处理
  4. 可移植性强,跨平台
2、oracle体系架构
1)数据库

Oracle 数据库是数据的物理存储。

Oracle 数据库的概念和其它数据库不一样,Oracle 就只有一个大数据库。

2)实例

一个数据库可以有多个实例,开多个Oracle进程。

3)数据文件dbf

数据文件是数据库的物理存储单位。

一个数据文件只能属于一个表空间。

4)表空间

对物理数据库上相关数据文件的逻辑映射。

5)用户

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

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

3、命令行界面
sqlplus 用户名/密码

4、使用Navicat远程连接

1、在虚拟机打开Net Manager软件

2、选择本地-监听程序-LISTENER,添加地址,ip为本机ip,端口号为1521

3、重启服务OracleOraDB19Home1TNSListener

4、在Navicat中选择Oracle数据库连接

5、成功连接

二、操作用户和表空间

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

oracle_12版本的特性,在CDB容器中用户名必须加c##前缀才能创建成功。

create user c##wateruser
identified by rexhao
default tablespace waterboss
  • wateruser 为创建的用户名
  • identified by 用于设置用户的密码
  • default tablesapce 用于指定默认表空间名称
3、用户赋权
grant dba to c##wateruser

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

4、删除用户
drop user 用户名 cascade
5、创建表
CREATE TABLE 表名称(
	字段名 类型(长度) primary key,
	字段名 类型(长度),
);
create table t_owners
(
    id number primary key,		-- 主键
    name varchar2(30),			-- 业主名称
    addressid number,			-- 地址 ID
    housenumber varchar2(30),	-- 门牌号
    watermeter varchar2(30),	-- 水表编号
    adddate date,				-- 登记日期
    ownertypeid number			-- 业主类型 ID
);

Oracle 数据类型

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
6、修改表
1)增加字段
-- 追加字段
ALTER TABLE T_OWNERS ADD
(
    REMARK VARCHAR2(20),
    OUTDATE DATE
)
2)修改字段
-- 修改字段
ALTER TABLE T_OWNERS MODIFY
(
    REMARK CHAR(20),
    OUTDATE TIMESTAMP
)
3)修改字段名
ALTER TABLE 表名称 RENAME COLUMN 原列名 TO 新列名
-- 修改字段名
ALTER TABLE T_OWNERS RENAME COLUMN OUTDATE TO EXITDATE
4)删除字段名
-- 删除一个字段
ALTER TABLE 表名称 DROP COLUMN 列名

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

三、数据的CRUD

1、添加数据
INSERT INTO 表名[(列名 1,列名 2...)]VALUES(1,值2...)

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

Navicat软件会自动提交事务

2、修改数据
UPDATE 表名 SET 列名1=1,列名2=2....WHERE 修改条件

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

3、删除数据
DELETE FROM 表名 WHERE 删除条件
TRUNCATE TABLE 表名称

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

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

  1. delete 删除的数据可以 rollback
  2. delete 删除可能产生碎片,并且不释放空间
  3. truncate 是先摧毁表结构,再重构表结构
4、查询数据
SELECT * FROM 表名

四、JDBC 连接 ORACLE

1、引入驱动包

JDBC 驱动:oracle.jdbc.OracleDriver

连接字符串(瘦连接):jdbc:oracle:thin:@虚拟机的 IP:1521:orcl

2、BaseDao类
package work.rexhao.dao;

import java.sql.SQLException;

public class BaseDao {
    static {
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    public static java.sql.Connection getConnection() throws SQLException {
        return java.sql.DriverManager.getConnection("jdbc:oracle:thin:@192.168.10.61:1521:orcl", "c##wateruser", "rexhao");
    }

    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();
            }
        }
    }
}
3、添加方法
public class OwnersDao {
    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);
        }
    }
}

五、数据导出与导入

1、整库导出与导入

整库导出命令

exp system/123.COM full=y

exp system/123.COM file=文件名 full=y

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

执行命令后会在当前目录下生成一个叫 EXPDAT.DMP,此文件为备份文件

指定备份文件的名称,则添加 file 参数

整库导入命令

imp system/123.COM full=y

imp system/123.COM full=y file=water.dmp

此命令如果不指定 file 参数,则默认用备份文件 EXPDAT.DMP 进行导入

如果指定 file 参数,则按照 file 指定的备份文件进行恢复

2、按用户导出与导入
### 按用户导出
exp system/123.COM owner=wateruser file=wateruser.dmp

### 按用户导入
imp system/123.COM file=wateruser.dmp fromuser=wateruser
3、按表导出与导入
### 按表导出
exp wateruser/itcast file=a.dmp tables=t_account,a_area

### 按表导入
imp wateruser/itcast file=a.dmp tables=t_account,a_area

tables 参数指定需要导出的表,如果有多个表用逗号分割即可

文章来源:https://blog.csdn.net/wmh1024/article/details/135431486
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。