oracle jdbc 处理块 预处理块
创始人
2025-05-31 10:32:22

DML

DML(Data Manipulation Language 数据操控语言)用于操作数据库对象中包含的数据,也就是说操

作的单位是记录

insert

添加记录时需要满足一下条件

类型 长度 兼容: 字段 兼容值

值满足约束 :主键 (唯一+非空) 非空(必填) 唯一(不重复 ) 默认(没有填写使用默认值) 检查(满足条件)

外键(参考主表主键列的值)

个数必须相同: 指定列,个数顺序与列相同;没有指定,个数与表结构的列个数和顺序相同 (null也

得占位,没有默认值)

update

要求:

1. 记录存在

2. 类型 长度 兼容: 字段 兼容值

3. 个数相同

delect

delete [from] 表名 where 过滤行记录

说明:

1. delete 可以删除指定部分记录,删除全部记录

2. 记录上存在主外键关联时, 删除存在关联的主表的记录时,注意 参考外键约束, 约束强制不让删除

先删除从表 再删除主表

截断数据

事务

定义:事务是指作为单个逻辑工作单元执行的一组相关操作。这些操作要求全部完成或者全部不完成。使用事务是为了保证数据的安全有效

特点:

1. 原子性(Atomic):事务中所有数据的修改,要么全部执行,要么全部不执行。

2. 一致性(Consistence):事务完成时,要使所有所有的数据都保持一致的状态,换言之:通过事

务进行的所有数据修改,必须在所有相关的表中得到反映。

3. 隔离性(Isolation):事务应该在另一个事务对数据的修改前或者修改后进行访问。

4. 持久性(Durability):保证事务对数据库的修改是持久有效的,即使发生系统故障,也不应该丢

失。

Oracle 默认的隔离级别是 read committed。

Oracle 支持上述四种隔离级别中的两种:read committed 和 serializable。除此之外, Oralce 中还定义

Read only 和 Read write 隔离级别。

Read only:事务中不能有任何修改数据库中数据的操作语句,是 Serializable 的一个子集。

Read write:它是默认设置,该选项表示在事务中可以有访问语句、修改语句,但不经常使用。

丢失更新:两个事务同时存储, 一个存储 100 , 一个存储 200,最终可能至存储了 200 或者 100,那

另一个的更新就没成功,即结果不为预想的 300

脏读:事务 T1 更新了一行数据,还没有提交所做的修改,T2 读取更新后的数据,T1回滚,T2 读取的数

据无效,这种数据称为脏读数据。

不可重复读:事务 T1 读取一行数据,T2 修改了 T1 刚刚读取的记录,T1 再次查询,发现与第一次读取

的记录不相同,称为不可重复读。

幻读:事务 T1 读取一条带 WHERE 条件的语句,返回结果集,T2 插入一条新纪录,恰好也是 T1 的

WHERE 条件,T1 再次查询,结果集中又看到 T2 的记录,新纪录就叫做幻读。

事务的开启:

自动开启于 DML 之 insert delete update

事务的结束:

1. 成功

正常执行完成的 DDL 语句:create、alter、drop

正常执行完 DCL 语句 GRANT、REVOKE

正常退出的 SQLPlus 或者 SQL Developer 等客户端

如果人工要使用隐式事务,SET AUTOCOMMIT ON (只针对一个连接)

手动提交 :使用 commit

2. 失败

rollback ,手动回滚

非法退出 意外的断电

rollback 只能对未提交的数据撤销,已经 Commit 的数据是无法撤销的,因为 commit 之后已经持久化到数据库中。

DDL

DDL(Data Definition Language 数据定义语言)用于操作对象对象的属性,这种对象包括数据库本身,以及数据库对象,像:表、视图等等,DDL 对这些对象和属性的管理和定义具体表现在 create、drop 和 alter 上。特别注意:DDL 操作的“对象”的概念,”对象“包括对象及对象的属性,而且对象最小也比记录大个层次。以表举例:create 创建数据表,alter 可以更改该表的字段,drop 可以删除这个表,从这里我们可以看到,DDL 所站的高度,他不会对具体的数据进行操作。

设计表

前提: 设计表首先应该按需遵循三范式

1. 确定表名

2. 确定字段名 类型 +约束(主键 外键 非空 默 检查认 唯一)

主键: 唯一标识一条记录(唯一并且非空)

唯一: 唯一

非空:不能为空默认: 当没给值时使用给定一个默认值

外键:参考其他表(自己)的某个(某些)字段

检查:自定义的规则

创建表

表名必须唯一,如果存在 ,必须删除

创建表(追加创建约束+指定名称)

--删除 (先删除从表 再删除主表 ;同时删除约束)
drop table tb_txt cascade constraints;
drop table tb_user cascade constraints;
表名 tb_user
主键 userid
字段名 中文 类型 为空 默认值 其他说明
userid 流水号 number(5) 否 主键
username 用户名 varchar2(30) 否 长度在4-20
userpwd 密码 varchar2(20) 否 长度在4-18
age 年龄 number(3) 18 大于>=18
gender 性别 char(2) 男 男or 女
email 邮箱 varchar2(30) 唯一
regtime 注册日期 date sysdate
create table tb_user(
userid number(5),
username varchar2(30) ,
userpwd varchar2(20) ,
age number(3) ,
gender char(2) ,
email varchar2(30),
regtime date default(sysdate)
);
--追加约束
alter table tb_user add constraint pk_user_id primary key (userid);
alter table tb_user add constraint ck_user_name check(length(username)between 4
and 20) ;
alter table tb_user add constraint ck_user_pwd check(length(userpwd) between 4
and 18);
alter table tb_user add constraint ck_user_age check(age>=18);
alter table tb_user add constraint ck_user_gender check(gender in('男','女'));
alter table tb_user add constraint uq_user_email unique(email);
--非空与默认
alter table tb_user modify (username constraint nn_user_name not null);
alter table tb_user modify (userpwd constraint nn_user_pwd not null);
alter table tb_user modify (age default(18));
alter table tb_user modify (gender default('男'));
--加入注释
comment on table tb_user is '用户表';
comment on column tb_user.userid is '流水号,主键';
comment on column tb_user.username is '用户名';
comment on column tb_user.userpwd is '密码';
comment on column tb_user.age is '年龄';
comment on column tb_user.gender is '性别';
comment on column tb_user.email is '邮箱';
comment on column tb_user.regtime is '注册日期';
表名 tb_txt
主键 txtid
字段名 中文 类型 为空 默认值 其他说明
txtid 流水号 number(10) 否 主键
title 标题 varchar2(32) 否 长度在4-30
txt 正文 varchar2(1024)
pubtime 发布时间 date sysdate
userid 发布人 number(5) 外键,参考tb_user的userid列
create table tb_txt(
txtid number(10),
title varchar2(32),
txt varchar2(1024),
pubtime date,
userid number(5)
);
--追加约束
alter table tb_txt add constraint pk_txt_id primary key(txtid);
alter table tb_txt add constraint ck_txt_id check(length(title)>=4 and
length(title)<=30);
--三种级联删除规则
alter table tb_txt add constraint fk_txt_ref_user_id foreign key(userid)
references tb_user(userid);
alter table tb_txt add constraint fk_txt_ref_user_id foreign key(userid)
references tb_user(userid) on delete cascade ;
alter table tb_txt add constraint fk_txt_ref_user_id foreign key(userid)
references tb_user(userid) on delete set null;
--注意非空 默认
alter table tb_txt modify (title constraint nn_txt_title not null) ;
alter table tb_txt modify (pubtime default(sysdate));
--注释
comment on table tb_txt is '文章表';
comment on column tb_txt.txtid is '流水号,主键';
comment on column tb_txt.title is '标题';
comment on column tb_txt.txt is '正文';
comment on column tb_txt.pubtime is '发布时间';
comment on column tb_txt.userid is '发布人,外键,参考tb_user的userid列';

已有表中拷贝结构

删除表

修改表结构

1. 修改表名 :rename to

2. 修改列名: alter table 表名 rename column to

3. 修改类型: alter table 表名 modify(字段 类型)

4. 修改约束: 先删除 后添加

5. 添加列: alter table 表名 add 字段 类型

6. 删除列:alter table 表名 drop column 字段

约束

在 oracle中所有的一切都是对象, 约束也是一个个的对象,除了能创建约束我们还能对约束进行一些其他的操作

查看某个用户的约束

查看表的约束

查看 字段名+约束

约束的禁用与启用

删除约束

修改约束

JDBC

角色分类

服务器 (db)

接收 sq

执行 sql

返回结果

客户端 (java)

接收数据

组装sql

发送SQL(与数据库建立联系)

分析结果

面向接口编程

1、java 制定标准 ,不同的数据库厂商实现 接口即可。java 中提供的接口 java.sql.* 包下,常用接口如下

2、oracle 厂商实现接口 (jar)

F:\app\Administrator\product\11.2.0\dbhome_1\jdbc\lib\ojdbc6.jar视安装路径而定

JDBC步骤

连接

准备工作:

1.引入驱动包

2.构建路径build path

3.测试用户是否正确登录

建立连接:

连接字符串

驱动: oracle.jdbc.driver.OracleDriver

url: jdbc:oracle:thin:@db 服务器地址:端口:实例

连接 url->jdbc:oracle:thin:@localhost:1521:XE

用户名: SCOTT

密码: TIGER

编写测试类

加载驱动

硬编码: new oracle.jdbc.driver.OracleDriver();

软编码: class.forName("oracle.jdbc.driver.OracleDriver")

建立连接

处理块

静态处理块Statement

Statement 是 Java 执行数据库操作的一个重要接口,用于在已经建立数据库连接的基础上,向数据库发送要执行的 SQL 语句。Statement 对象,用于执行不带参数的简单 SQL 语句。

执行静态 SQL 语句并返回它所生成结果的对象。

创建 :

连接.Connection.createStatement()

执行 :

ddl -->execute(dd语句) -- 通常不会在代码中执行

dml -->executeUpdate(dml语句)

select -->executeQuery(select)

特点 :

处理 不变的静态的 sql 语句

优点: 直接查看sql ,方便处理错误

缺点:性能不高 拼接 sql 麻烦 可能存在 sql 注入

预处理块 PreparedStatement

PreparedStatement 接口继承了 Statement,并与之在两方面有所不同:有人主张,在 JDBC 应用中,

如果你已经是稍有水平开发者,你就应该始终以 PreparedStatement 代替 Statement.也就是说,在任

何时候都不要使用 Statement。

优点:

1. 由于 PreparedStatement 对象已预编译过,所以其执行速度要快于 Statement对象。因此,多次

执行的 SQL 语句经常创建为 PreparedStatement 对象,以提高效率

2. 防止SQL注入问题

创建:

创建:连接.prepareStatement(sql)

执行:

存在? ,先填充参数再执行

ddl -->execute()

dml -->executeUpdate()

select -->executeQuery()

特点:

处理 不变的静态的 sql 语句 |可变的 sql 语句 带 ? 的 sql

优点:性能高,方便编写sql 不存在sql注入 安全

缺点:不能直接打印sql语句 不方便处理错误

分析

执行完SQL 语句后可能成功也可能失败,如果成功,有数据则我们很大一部分情况是需要获取查询的结果。数据就是一切

ddl:没有异常就是成功

dml: 结果>0就是成功

select:分析结果集

对于 select 的结果集进行分析,类似于迭代器, 先判断(移动)再获取

next()

getXxx(索引|列名|别名)

释放资源

释放资源的原则是 先打开的后关闭, 则我们的顺序一般为: 结果集->处理块->连接

相关内容

热门资讯

重大爆料“天天十三水有没有挂”... 亲.天天十三水这款游戏是可以开挂的,确实是有挂的,通过添加客服【4830828】很多玩家在这款游戏中...
实测分享“星悦广西麻将究竟有挂... 您好:星悦广西麻将这款游戏可以开挂,确实是有挂的,需要软件加微信【8700483】,很多玩家在星悦广...
玩家实测“乐酷斗牛可以开挂吗”... 您好:乐酷斗牛这款游戏可以开挂,确实是有挂的,需要软件加微信【5951795】,很多玩家在乐酷斗牛这...
今日重大通报“乐酷牛牛透视辅助... 您好:乐酷牛牛这款游戏可以开挂,确实是有挂的,需要软件加微信【4194432】,很多玩家在乐酷牛牛这...
分享实测“红豆娱乐牛牛辅助透视... 您好:红豆娱乐牛牛这款游戏可以开挂,确实是有挂的,需要了解加客服微信【4194432】很多玩家在红豆...