代码编织梦想

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(索引|列名|别名)

释放资源

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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_51170293/article/details/129676266

jdbc连接oracle_wangzuao的博客-爱代码爱编程

jdbc连接oracle //三农 import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedState

jdbc连接oracle数据库_sh止于终老的博客-爱代码爱编程

JDBC: 1、java制定标准,不同的数据库厂商实现接口即可。 2、oracle厂商实现接口 F:\app\Administrator\product\11.2.0\dbhome_1\jdbc\lib\ojdbc

jdbc——java与oracle数据库的连接-爱代码爱编程

JDBC(Java Data Base Connectivity,Java数据库连接) 它是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,由一组用Java语言编写的类和接口(如Connecti

JDBC-爱代码爱编程

JDBC JDBC: java database connectivity,即java与数据库的连接。 JDBC常用API作用Driver接口所有JDBC驱动程序必须实现的接口,专门提供给数据库厂商使用DriverManager类加载JDBC驱动并创建于数据库的连接Connection接口代表Java与数据库连接的对象,只有获取这个对象才能操

原⽣jdbc与预处理对象PreparedStatment 2-爱代码爱编程

API详解 注册驱动: DriverManager.registerDriver(new com.mysql.jdbc.Driver()); 不建议使⽤,原因有2个: 导致驱动被注册2次强烈依赖数据库的驱动jar解决办法: Class.forName("com.mysql.jdbc.Driver");API详解:获得链接 static Conne

Oracle JDBC 详解类实现方法介绍 封装增删改查方法-爱代码爱编程

Oracle JDBC 介绍: Java DataBase Connectivity java与数据库连接。 java通过jdbc这个连接,连接数据库,操作数据库。所以java 制定了标准 ,不同的数据库厂商实现 接口即可。 java 中提供的接口 java.sql.* 包下,常用接口如下。 接口名称功能java.sql.Conne

php oracle 预处理,Oracle预处理查询异常-爱代码爱编程

在工作中发现这样的问题:在Oracle的10g之前的版本,存在一个bug,即用PreparedStatement预处理去动态查询数据时,用占位符?代替 在工作中发现这样的问题:在Oracle的10g之前的版本,存在一个bug,即用PreparedStatement预处理去动态查询数据时,用占位符?代替的字段,如果是char类型的,那么在执行时用来代替

oracle jdbc 测试,JDBC连接Oracle数据库测试-爱代码爱编程

package date20180727.dao; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLExcept

oracle解析clob,解析jdbc处理oracle的clob字段的详解-爱代码爱编程

import java.io.BufferedOutputStream; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.i

JDBC学习笔记(JDBC,结果集,预处理,反射封装,JDBC批处理)-爱代码爱编程

JDBC学习笔记 JDBC概述连接MySQL数据库1.java.sql包下常用的接口2.JDBC连接数据库的步骤示例1:变更语句:executeUpdate示例2:查询语句:executeQuery3.JDBC优化准备用class.forName()方法不会执行`com.mysql.jdbc.Driver`类的构造方法,会直接直接静态代码块中的`

Oracle独特的技术、JDBC-爱代码爱编程

文章目录 一. Oracle独特的技术1. 过气技术2. 虚表 dual3. 序列 sequence4. 授权视图5. 视图 view6. 触发器 trigger7. 存储过程 procedure二. JDBC1. 概念2. 使用3. 向IDEA中导入jar包4. 入门案例5. SQL攻击注入的解决方案 一. Oracle独特的技术 1. 过

【Java】JDBC操作Oracle数据库-爱代码爱编程

1、Statement         用于执行静态 SQL 语句并返回它所生成结果的对象。 statement每次执行sql语句,相关数据库都要执行sql语句的编译 import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; imp

Oracle05-JDBC-爱代码爱编程

目录 一、JDBC 1.1.为什么要使用JDBC? 1.2.JDBC的实现 1.3.JDBC的常用接口 1.3.1.接口路径 1.3.2.Oracle厂商的实现接口 1.4.JDBC的基本流程 准备工作[以IDEA举例] 1.4.1.加载驱动 1.4.2.建立连接 1.4.3.准备SQL语句 1.4.4.封装处理块 1.4.5.得

【jdbc】sql注入安全_世界尽头与你的博客-爱代码爱编程

【JDBC】SQL注入安全 1.javaSQL注入2.预处理查询 1.javaSQL注入 Statement在实际使用的时候会引发sql注入的问题,因此我们在开发时常用PreparedStatement(预处

备忘录模式-爱代码爱编程

备忘录模式(Memento Pattern),也叫快照(Snapshot)模式,在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态;这样以后就可将该对象恢复到原先保存的状态。主要是用来防丢失、撤销、恢

网络编程-爱代码爱编程

网络编程 网络编程一、什么是网络二、计算机网络三、网络编程四、网络模型(OSI模型)五、TCP/IP模型六、TCP\UDP协议七、IP八、Port端口九、InetAddress类十、网络编程10.1 Socket编程