oracle概述
Oracle(甲骨文公司),全称甲骨文股份有限公司(甲骨文软件系统有限公司),是全球最大的企业级软件公司,总部位于美国加利福尼亚州的红木滩。1989年正式进入中国市场。2013年,甲骨文已超越 IBM ,成为继 Microsoft 后全球第二大软件公司。2020年9月14日,甲骨文证实,它已经与TikTok的中国所有者字节跳动达成协议,成为其“可信技术提供商”,但该协议仍需美国政府批准。
对于我们 java 程序员而言,我们必须要记住这个甲骨文公司,因为它旗下有两个产品和我们息息相关
- JAVA语言(技术)
2009年,甲骨文公司宣布收购Sun
。2010年,Java编程语言的共同创始人之一詹姆斯·高斯林从Oracle公司辞职。2011年,甲骨文公司举行了全球性的活动,以庆祝Java7的推出,随后Java7正式发布。2014年,甲骨文公司发布了Java8正式版 。 - Oracle 数据库
Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的、适应高吞吐量的数据库方案。
oracle常用账号
- Sys sysdba 系统超级管理员
(Sys /system 一般都是管理身份,用于管理oracle数据。默认 sys ,system都是没有oracle没有加锁,可以直接能录orcl数据。) - System 普通用户 具备管理员权限
- Scott 示例账号 提供了一些常用的练习表 密码:tiger (需设置)
(Scott 普通用户,一般都是开发学习使用此账户,但是默认scott账户是加锁的,需用使用 sys 登录进行解锁操作!!) - 自定义账号: mike 、jack
oracle重要概念
全局数据库:一般只有一个全局数据库
表空间:tablespace 数据库对象
Oracle 存放数据的基本逻辑单元
模式 schema 理解成“用户”
数据库的实例
oracle表空间创建
三部曲
- 创建表空间
- 创建用户
- 授权
-- 1. 创建表空间
CREATE TABLESPACE gz2015_tablespace -- 逻辑名
DATAFILE 'D:\Oracle\orcl_tablespace\gz2015.DBF' --物理文件路径
SIZE 10M AUTOEXTEND ON; -- size表示初始容量 ,可以自动扩展容量
--2. 创建用户
CREATE USER gz2015 IDENTIFIED BY gz2015
DEFAULT TABLESPACE gz2015_tablespace; -- 指定当前帐号使用的表空间
--3. 授权 包括权限和角色 角色是权限的集合
select * from role_sys_privs where role='RESOURCE';
select * from role_sys_privs where role='CONNECT';
GRANT RESOURCE,CONNECT TO gz2015;
-- REVOKE .... FROM ....
oracle中建表
oracle中数据库字段类型
建表操作
建表语句:
create table item
(
item_id number(9) primary key not null,
item_name varchar2(200) not null,
price number(8,2) not null,
createtime date not null,
detail varchar2(500) not null
)
插入操作:
注意在oracle中插入、更新、删除的时候,都需要手动commit一下,这时候数据才会真正的保存到数据库中!!
oracle中主键自增处理
在oracle中并没有自动增长一说,我们需要借助于序列来自己完成
create sequence seq_items_id; -- 默认是以1 开始,然后以1 递增
drop sequence seq_items_id; -- 删除一个序列
-- 设置自增序列的 属性 从2 开始 每次 递增1
create sequence seq_items_id
start with 2
increment by 1;
如何查询序列呢?
select seq_items_id.nextval from dual; -- 每次产生一个
select seq_items_id.currval from dual; -- 获取当前的序列id
oracle中内置函数
- to_date():转化为时间数据类型输出
- to_char():转化为字符串数据类型输出
- to_number():转化为数字数据类型输出
select to_date('2019-10-10','yyyy-mm-dd') from dual;
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
select to_char(sysdate,'yyyy"年"mm"月"dd"日" hh24:mi:ss') from dual;
select to_number('123')from dual;
select to_number('123q') from dual; -- 操作不合理,会报错!
-- 以上语句如果可以转就转换,如果不能转换就直接抛出异常
oracle中分页操作
rownum认识
查询前5条数据
PLSQL编程
基本语法
定义基本变量
declare
age integer:=10;
username varchar2(30);
begin
username :='mike jack';
dbms_output.put_line('年龄是:'||age);
end;
if判断
declare
score integer:=92;
age integer:=10;
begin
dbms_output.put_line('当前分数是:'||score);
if age>=90 then
dbms_output.put_line('成年了'||age);
end if;
if score>=90 then
dbms_output.put_line('优秀');
elsif score>=80 then
dbms_output.put_line('良好');
elsif score>=70 then
dbms_output.put_line('一般');
else
dbms_output.put_line('差');
end if;
end;
case分支
-- case 分支
declare
grade nvarchar2(20);
begin
grade :='A';
case grade
when 'A' then dbms_output.put_line('优秀');
when 'B' then dbms_output.put_line('良好');
when 'C' then dbms_output.put_line('一般');
else
dbms_output.put_line('很差');
end case;
end;
loop循环
declare
i integer := 1;
begin
loop
if i>100 then
exit;
end if;
dbms_output.put_line('第'||i||'次输出了..');
i:= i+1;
end loop;
end;
while循环
declare
i integer:=1;
total integer :=0;
begin
while i<=100 loop
total := total + i;
i := i+1;
end loop;
dbms_output.put_line(total);
end;
结果是:5050
for循环
declare
begin
for i in 1..100 loop
dbms_output.put_line(i);
end loop;
end;
select into 语法
declare
v_num integer;
begin
-- v_num:= 10;
select item_id into v_num from item where item_id = 1;
dbms_output.put_line(v_num);
end;
oracle中异常
在运行程序时出现的错误叫做异常
发生异常后,语句将停止执行,控制权转移到 PL/SQL 块的异常处理部分
异常有两种类型:
预定义异常 - 当 PL/SQL 程序违反 Oracle 规则或超越系统限制时隐式
引发
用户定义异常 - 用户可以在 PL/SQL 块的声明部分定义异常,自定义的
异常通过 RAISE 语句显式引发
Oracle 预定义异常 21 个
declare
v_num integer;
begin
-- v_num:= 10;
select item_id into v_num from item where item_id = 100; -- 此时数据肯定查询不到,一定会报错!
dbms_output.put_line(v_num);
如何处理:
declare
v_num integer;
begin
-- v_num:= 10;
select item_id into v_num from item where item_id = 100; -- 此时数据肯定查询不到,一定会报错!
dbms_output.put_line(v_num);
exception
when no_data_found then
dbms_output.put_line('没有找到数据啊..');
end;
再看一种情况
declare
v_num integer;
begin
-- v_num:= 10;
select item_id into v_num from item; -- 此时去查询,会出现很多条数据
dbms_output.put_line(v_num);
exception
when no_data_found then
dbms_output.put_line('没有找到数据啊..');
when too_many_rows then
dbms_output.put_line('返回了多行数据啦...');
end;
plsql高级-触发器
create trigger t2
after
insert on item
declare
begin
dbms_output.put_line('触发器被触发了..');
end;
自动会触发 触发器
-- 触发触发器
insert into item values(5,'小米5');
JDBC连接oralce
BaseDao
public class BaseDao {
static {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "scott", "tigger");
}
}
测试类
public static void main(String[] args) throws SQLException {
Connection connection = BaseDao.getConnection();
Statement statement = connection.createStatement();
String sql = "insert into item values(3,'小米3')";
int i = statement.executeUpdate(sql);
System.out.println("插入成功:"+i);
}