您当前的位置: 首页 >  oracle

程序员一灯

暂无认证

  • 3浏览

    0关注

    152博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Oracle 入门到精通系列【 第 1 章】

程序员一灯 发布时间:2021-12-26 15:15:36 ,浏览量:3

  • 🚌一个人可以走的很快,一群人可以走的很远🇨🇳
  • 🎉点赞➕评论➕收藏 ➕关注== 养成习惯(一键四连)📝
  • 🎉欢迎关注💗一起学习👍一起讨论⭐️一起进步📝
  • 🙏作者水平有限,欢迎各位大佬指点,相互学习进步!😆

目录

一、ORACLE 简介

(一)什么是 ORACLE

(二)ORACLE 体系结构

1、数据库

2、实例

3、数据文件(dbf)

4、表空间

5、用户

二、ORACLE 安装与配置

三、创建表空间、用户、授权

3.1、格式

3.2、创建表空间例子

3.3、创建用户例子

3.4、授权

四、表的创建、修改与删除

(一)创建表

(二)修改表

(三)删除表

五、数据增删改

(一)插入数据

(二)修改数据

(三)删除数据

六、JDBC 连接 ORACLE

(一)创建工程,引入驱动包

二)JDBC连接数据库

(三)增删改查代码编写

一、ORACLE 简介 (一)什么是 ORACLE

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

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

ORACLE 数据库是目前世界上使用最为广泛的数据库管理系统,作为一个通用的数据库系统,它具有完整的数据管理功能;作为一个关系数据库,它是一个完备关系的产品;作为分布式数据库它实现了分布式处理功能。

ORACLE 数据库具有以下特点:

(1)支持多用户、大事务量的事务处理

(2)数据安全性和完整性控制

(3)支持分布式数据处理

(4)可移植性

(二)ORACLE 体系结构 1、数据库

Oracle 数据库是数据的物理存储。这就包括(数据文件 ORA 或者 DBF、控制文件、联机日志、参数文件)。其实 Oracle 数据库的概念和其它数据库不一样,这里的数据库是一个操作系统只有一个库。可以看作是 Oracle 就只有一个大数据库。

2、实例

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

3、数据文件(dbf)

数据文件是数据库的物理存储单位。数据库的数据是存储在表空间中的,真正是在某一个或者多个数据文件中。而一个表空间可以由一个或多个数据文件组成,一个数据文件只能属于一个表空间。一旦数据文件被加入到某个表空间后,就不能删除这个文件,如果要删除某个数据文件,只能删除其所属于的表空间才行。

4、表空间

表空间是 Oracle 对物理数据库上相关数据文件(ORA 或者 DBF 文件)的逻辑映射。一个数据库在逻辑上被划分成一到若干个表空间,每个表空间包含了在逻辑上相关联的一组结构。每个数据库至少有一个表空间(称之为 system 表空间)。

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

注:表的数据,是有用户放入某一个表空间的,而这个表空间会随机把这些表数据放到一个或者多个数据文件中。

由于 oracle 的数据库不是普通的概念,oracle 是有用户和表空间对数据进行管理和存放的。但是表不是有表空间去查询的,而是由用户去查的。因为不同用户可以在同一个表空间建立同一个名字的表!这里区分就是用户了!

5、用户

用户是在表空间下建立的。用户登陆后只能看到和操作自己的表, ORACLE的用户与 MYSQL 的数据库类似,每建立一个应用需要创建一个用户。

二、ORACLE 安装与配置

安装相关文档:Windows下安装oracle11g_做Java整整10年,目前是教别人写代码,嘿嘿-CSDN博客icon-default.png?t=LA92https://blog.csdn.net/imjcoder/article/details/122140908

三、创建表空间、用户、授权 3.1、格式
用户
建立:create user 用户名 identified by "密码";
授权:grant create session to 用户名;
            grant create table to  用户名;
            grant create tablespace to  用户名;
            grant create view to  用户名;
表空间
建立表空间(一般建N个存数据的表空间和一个索引空间):
create tablespace 表空间名
datafile ' 路径(要先建好路径)\***.dbf  ' size *M
tempfile ' 路径\***.dbf ' size *M
autoextend on  --自动增长
--还有一些定义大小的命令,看需要
 default storage(
 initial 100K,
 next 100k,
);
用户权限
授予用户使用表空间的权限:
alter user 用户名 quota unlimited on 表空间;
或 alter user 用户名 quota *M on 表空间;
3.2、创建表空间例子
例子:创建表空间
create tablespace dushibao 
datafile 'c:/oracle/dushibao.dbf' 
size 1500M 
autoextend on next 5M maxsize 3000M;
-- 删除表空间
-- drop tablespace DEMOSPACE including contents and datafiles
3.3、创建用户例子
-- 2.建用户
create user dushibao identified by dushibao 
default tablespace dushibao;
3.4、授权
grant connect,resource to dushibao;
grant create any sequence to dushibao;
grant create any table to dushibao;
grant delete any table to dushibao;
grant insert any table to dushibao;
grant select any table to dushibao;
grant unlimited tablespace to dushibao;
grant execute any procedure to dushibao;
grant update any table to dushibao;
grant create any view to dushibao;
四、表的创建、修改与删除 (一)创建表

语法:

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

实例:

创建用户表:

create table t_user
(
id number primary key,
addTime date,
userName varchar2(30),
password varchar2(30)
);
(二)修改表

1. 增加字段语法:

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

为用户表增加两个字段,语句:

--追加字段
ALTER TABLE t_user ADD
(
 remark VARCHAR2(20),
 logTime DATE
)

2. 修改字段语法:

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

修改两个字段的类型,语句:

--修改字段
ALTER TABLE t_user MODIFY
(
REMARK CHAR(20),
logTime TIMESTAMP
)

3. 修改字段名语法:

ALTER TABLE 表名称 RENAME COLUMN 原列名 TO 新列名

语句:

ALTER TABLE t_user RENAME COLUMN logTime TO loginTime

4. 删除字段名

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

语句:

--删除字段
ALTER TABLE t_user DROP COLUMN REMARK
(三)删除表

语法:

DROP TABLE 表名称

DROP TABLE t_user;
五、数据增删改 (一)插入数据

语法:

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

向表插入数据:

insert into t_user VALUES (1,sysdate,'zhangsan','123456');

语句中的 sysdate 是系统变量用于获取当前日期

(二)修改数据

语法:

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

需求:将 ID 为 1 的用户的登录日期更改为三天前的日期

--追加字段
ALTER TABLE t_user ADD
(

 logTime DATE
)
update t_user set logTime=logTime-3 where id=1;
commit;
(三)删除数据

语法 1:

DELETE FROM 表名 WHERE 删除条件;

需求:删除D 为 2 的用户信息

delete from t_user where id=2;
commit;

语法 2:截断清空表

TRUNCATE TABLE 表名称

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

1. delete 删除的数据可以 rollback

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

3. truncate 是先摧毁表结构,再重构表结构

六、JDBC 连接 ORACLE (一)创建工程,引入驱动包

在下图目录中可以找到驱动包 ORACLE 的 JDBC 驱动包,拷贝到工程即可使用

找到对应的oracle安装位置,找到驱动包,由于我是11g,所以使用ojdbc6.jar。

注:oracle的jar包不是开源的,所以只能去他提供的安装目录去找,或者官网下载。

C:\app\44075\product\11.2.0\dbhome_1\jdbc\lib

放到maven仓库中,使用maven引入项目

        
            oracle
            ojdbc6
            6
            system
            C:\Users\Administrator\.m2\repository\oracle\ojdbc6.jar
        

 

二)JDBC连接数据库

JDBC 驱动为:

oracle.jdbc.OracleDriver

连接字符串:

jdbc:oracle:thin:@虚拟机的 IP:1521:orcl

    //加载驱动
    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 DriverManager.getConnection("jdbc:oracle:thin:@192.168.10.128:1521:orcl", "dushibao", "dushibao");
    }

    /**
     * 关闭资源
     *
     * @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();
            }
        }
    }
(三)增删改查代码编写

1.创建实体类

@Data
public class User {
    private Integer id;

    private Date addTime;

    private String userName;

    private String password;

    private Date logTime;
}

2.创建 Dao 类实现增删改

    /**
     * 新增用户
     * @param user
     */
    public void add(User user) {
        java.sql.Connection conn = null;
        java.sql.PreparedStatement stmt = null;
        try {
            conn = DBUtils.getConnection();
            stmt = conn.prepareStatement("insert into t_user values(?,sysdate,?,?,sysdate)");
            stmt.setLong(1,user.getId());
            stmt.setString(2,user.getUserName());
            stmt.setString(3,user.getPassword());

            stmt.execute();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            DBUtils.closeAll(null, stmt, conn);
        }
    }
    
    @Test
    public void add(){
        UserDao userDao = new UserDao();
        User user = new User();
        user.setId(3L);
        user.setUserName("张三");
        user.setPassword("123456");
        userDao.add(user);
    }
		/**
     * 更新用户信息
     * @param user
     */
    public void update(User user) {
        java.sql.Connection conn = null;
        java.sql.PreparedStatement stmt = null;
        try {
            conn = DBUtils.getConnection();
            stmt = conn.prepareStatement("update t_user set userName=?,password=?,logTime=sysdate where id=?");
            stmt.setString(1, user.getUserName());
            stmt.setString(2, user.getPassword());
            stmt.setLong(3,user.getId());
            stmt.execute();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            DBUtils.closeAll(null, stmt, conn);
        }
    }
    
    @Test
    public void update(){
        UserDao userDao = new UserDao();
        User user = new User();
        user.setId(3L);
        user.setUserName("李四");
        user.setPassword("789456123");
        userDao.update(user);
    }
    /**
     * 删除用户
     * @param id
     */
    public void delete(Long id) {
        java.sql.Connection conn = null;
        java.sql.PreparedStatement stmt = null;
        try {
            conn = DBUtils.getConnection();
            stmt = conn.prepareStatement("delete from t_user where id=?");
            stmt.setLong(1, id);
            stmt.execute();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            DBUtils.closeAll(null, stmt, conn);
        }
    }
    
    @Test
    public void delete(){
        UserDao userDao = new UserDao();
        userDao.delete(3l);
    }
 /**
     * 根据ID查询
     *
     * @param id
     */
    public User getById(Long id){
        java.sql.Connection conn = null;
        java.sql.PreparedStatement stmt = null;
        ResultSet rs = null;
        try {
            conn = DBUtils.getConnection();
            String sql = "SELECT id,addTime,userName,password,logTime FROM t_user WHERE id=?";
            stmt = conn.prepareStatement(sql);
            stmt.setLong(1,id);
            rs = stmt.executeQuery();
            User user = new User();
            while(rs.next()){

                user.setId(rs.getLong(1));
                user.setAddTime(rs.getDate(2));
                user.setUserName(rs.getString(3));
                user.setPassword(rs.getString(4));
                user.setLogTime(rs.getDate(5));
            }
            return user;
        } catch (SQLException e) {
            throw new RuntimeException(e.getMessage());
        } finally {
            DBUtils.closeAll(null, stmt, conn);
        }
    }
    
    @Test
    public void getById(){
        UserDao userDao = new UserDao();
        User user = userDao.getById(1L);
        System.out.println(user);
    }

关注
打赏
1645367472
查看更多评论
立即登录/注册

微信扫码登录

0.2723s