ORACLE 第 1 章
ORACLE 数据库
第 1 章
ORACLE 基础
一、ORACLE 简介
(一)什么是 ORACLE
ORACLE 数据库系统是美国 ORACLE 公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S 体系结构的数据库之一。
ORACLE 通常应用于大型系统的数据库产品。
ORACLE 数据库是目前世界上使用最为广泛的数据库管理系统,作为一个通用的数据库系统,它具有完整的数据管理功能;作为一个关系数据库,它是一个完备关系的产品;作为分布式数据库它实现了分布式处理功能。
ORACLE 数据库具有以下特点:
(1)支持多用户、大事务量的事务处理
(2)数据安全性和完整性控制
(3)支持分布式数据处理
(4)可移植性
(5)PL/SQL 可编程
(二)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 安装与配置
oracle安装
oracle下载地址:https://www.oracle.com/cn/database/technologies/microsoft-windows.html
sqlDeveloper:
下载地址:https://www.oracle.com/tools/downloads/sqldev-downloads.html
安装oracle
取消勾选,选择下一步
全局数据库名:orcl
密码:123456
等待安装
这里配置账号密码
取消选中状态,密码:123456
打开:scott账号,密码:123456
下面一路点击:是
连接scott账号
账号密码:scott:123456
连接sys账号
账号密码:sys:123456
连接system账号
账号密码:system:123456
远程连接配置
找到目录
C:\app\Administrator\product\11.2.0\dbhome_1\NETWORK\ADMIN 修改:listener.ora、tnsnames.ora
将localhost改成电脑主机名
获取电脑主机名:
我的电脑>右击属性
默认:listener.ora、tnsnames.ora两个文件是没有操作权限的,给这两个文件配置操作权限
选中右击>属性>安全
重启oracle
关闭虚拟机中的防火墙
配置完成后重启虚拟机
远程连接
在宿主机中通过SqlDeveloper连接oracle
三、创建表空间、用户、授权
3.1、格式
表空间
建立表空间(一般建N个存数据的表空间和一个索引空间):
create tablespace 表空间名
datafile ' 路径(要先建好路径)\***.dbf ' size *M
autoextend on next *M maxsize *M --自动增长
; 用户
create user 用户名 identified by "密码"
[default tablespace ts_name];
用户权限
授予用户使用表空间的权限:
alter user 用户名 quota unlimited on 表空间;
或 alter user 用户名 quota *M on 表空间;-- 连接、资源权限
grant connect,resource to 用户名;
-- 创建序列权限
grant create any sequence to 用户名;
-- 创建表权限
grant create any table to 用户名;
-- 删除表权限
grant delete any table to 用户名;
-- 插入数据权限
grant insert any table to 用户名;
-- 查询数据权限
grant select any table to 用户名;
-- 更新表权限
grant update any table to 用户名;
-- 表空间权限
grant unlimited tablespace to 用户名;
-- 存储过程权限
grant execute any procedure to 用户名;-- 创建视图权限
grant create any view to 用户名;
3.2、创建表空间例子
例子:创建表空间 c:/oracle 文件夹必须先要有!
create tablespace dushibao
datafile 'c:/oracle/dushibao.dbf'
size 1500M
autoextend on next 5M maxsize 3000M; -- 删除表空间
-- drop tablespace dushibao including contents and datafiles 需要在sys账号下面操作
3.3、创建用户例子
-- 2.建用户 user账号:dushibao identified by 密码:dushibao default tablespace:默认表空间
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;
连接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)
); oracle中char、varchar和varchar2区别
1. CHAR的长度是固定的,而VARCHAR2的长度是可以变化的
2.CHAR的效率比VARCHAR2的效率稍高。
3.目前VARCHAR是VARCHAR2的同义词。工业标准的VARCHAR类型可以存储空字符串,但是oracle不这样做,尽管它保留以后这样做的 权利。Oracle自己开发了一个数据类型VARCHAR2,这个类型不是一个标准的VARCHAR,它将在数据库中varchar列可以存储空字符串的 特性改为存储NULL值。如果你想有向后兼容的能力,Oracle建议使用VARCHAR2而不是VARCHAR。
varchar和varchar2区别:
1.varchar2把所有字符都占两字节处理(一般情况下),varchar只对汉字和全角等字符占两字节,数字,英文字符等都是一个字节;可以存4000个长度数据
2.VARCHAR2把空串等同于null处理,而varchar仍按照空串处理;
3.VARCHAR2字符要用几个字节存储,要看数据库使用的字符集,
oracle中都是使用varchar2
(二)修改表
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,...) 向表插入数据:语句中的 sysdate 是系统变量用于获取当前日期
insert into t_user(id,addTime,userName,password) VALUES (2,sysdate,'zhangsan','123456'); (二)修改数据
语法:
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 是先摧毁表结构,再重构表结构
4.truncate删除效率更高
六、JDBC 连接 ORACLE
https://gitee.com/DAMO-Admin/oraclejdbcdemo
(一)创建工程,引入驱动包
在下图目录中可以找到驱动包 ORACLE 的 JDBC 驱动包,拷贝到工程即可使用
找到对应的oracle安装位置,找到驱动包,由于我是11g,所以使用ojdbc6.jar。
注:oracle的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();}}} (三)增删改查代码编写
创建实体类
@Data
public class User {private Integer id;private Date addTime;private String userName;private String password;private Date logTime;
}
创建 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);}}@Testpublic 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);}}@Testpublic 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);}}@Testpublic 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);}}@Testpublic void getById(){UserDao userDao = new UserDao();User user = userDao.getById(1L);System.out.println(user);}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
