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 表名称
区别
-
delete 删除的数据可以 rollback,TRUNCATE 不可回滚 ,delete 删除数据实际上,是删除的数据挪到回滚段中,提交后才会将回滚段中删除的数据提交
-
delete 删除可能产生碎片,并且不释放空间
-
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