数据库和JDBC

本文详细介绍了数据库事务的四大特性(ACID)及其在并发情况下的隔离级别,包括Oracle的特定实现。此外,讨论了事务可能导致的问题,如丢失更新、脏读、不可重复读和幻读。接着,文章讲解了数据库操作的DML语句,如INSERT、UPDATE和DELETE的使用场景及注意事项。最后,阐述了JDBC在数据库连接和操作中的角色,包括Statement与PreparedStatement的比较和使用步骤。

事务
事务是指作为单个逻辑工作单元执行的一组相关操作。这些操作要求全部完成或者全部不完成。使用事务是为了保证数据的安全有效。
事务有一下四个特点:(ACID)
1、原子性(Atomic):事务中所有数据的修改,要么全部执行,要么全部不执行。
2、一致性(Consistence):事务完成时,要使所有所有的数据都保持一致的状态,换言之:通过事务进行的所有数据修改,必须在所有相关的表中得到反映。
3、隔离性(Isolation):事务应该在另一个事务对数据的修改前或者修改后进行访问。
4、持久性(Durability):保证事务对数据库的修改是持久有效的,即使发生系统故障,也不应该丢失。
当事务之间发生并发时有几个隔离级别

隔离级别 脏读 不可重复读 幻读
Read uncommitted 是 是 是
Read committed 否 是 是
Repeatable(可重复读) 否 否 是
Serializable(串行读) 否 否 否

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 的记录,新纪录就叫做幻读。
1、事务的开启
自动开启于 DML 之 insert delete update
2、事务的结束

  1. 成功
     正常执行完成的 DDL 语句:create、alter、drop
     正常执行完 DCL 语句 GRANT、REVOKE
     正常退出的 SQLPlus 或者 SQL Developer 等客户端
     如果人工要使用隐式事务,SET AUTOCOMMIT ON (只针对一个连接)
     手动提交 :使用 commit
  2. 失败
     rollback ,手动回滚
     非法退出 意外的断电
    rollback 只能对未提交的数据撤销,已经 Commit 的数据是无法撤销的,因为 commit之后已经持久化到数据库中。
    二、DML
    前面的 DDL(Data Definition Language 数据定义语言)用于操作对象和对象的属性,这种对象包括数据库本身,以及数据库对象,像:表、视图等等,DDL 对这 些对象和属性的管理和定义具体表现在 create、drop 和 alter 上。特别注意:DDL 操作的“对象”的概念,”对象“包括对象及对象的属性,而且对象最小也比记录大个层次。以表举例:create 创建数据表,alter 可以更改该表的字段,drop 可以删除这个表,从这里我们可以看到,DDL 所站的高度,他不会对具体的数据进行操作。
    DDL 的主要语句(操作)
    语句 作用
    create 可以创建数据库和数据库的一些对象
    drop 可以删除数据表、索引、条件约束等
    alter 修改数据表定义及属性
    DML(Data Manipulation Language 数据操控语言)用于操作数据库对象中包含的数据,也就是说操作的单位是记录。
    DML 的主要语句(操作)
    语句 作用
    Insert 向数据表张插入一条记录
    Delete 删除数据表中的一条或多条记录,也可以删除数据表中的所有记录,但是,它的操作对象仍是记录
    Update 用于修改已存在表中的记录的内容
    使用场景:
    insert 注册
    update 修改密码
    delete 退出、删除、剔除会员
    select 登录|查看会员
    1、insert
    insert into 表名 [(字段列表)] values(值列表); 添加记录
    添加记录时需要满足一下条件
     类型 长度 兼容: 字段 兼容值
     值满足约束 :主键 (唯一+非空) 非空(必填) 唯一(不重复 ) 默认(没有填写使用默认值) 检查(满足条件) 外键(参考主表主键列的值)
     个数必须相同: 指定列,个数顺序与列相同;没有指定,个数与表结构的列个数和顺序相同 (null也得占位,没有默认值)
    添加数据
    insert into 表名 values(和表结构顺序和个数和类型一致的数据可以手写也可以从别的表中获取的);
    insert into 表名(指定列名) values(和指定的列个数、顺序、类型一致的列数据)
    2、update
    update 为修改数据
    update 表名 set 字段=值 [,…] where 过滤行记录;
    要求:
     记录存在
     类型 长度 兼容: 字段 兼容值
     个数相同
    更改数据
    从已有表中查询数据更改字段值:
    update 表名 set(字段列表)=(select 字段列表 from 源表 where 过滤源表记录 ) where 更新记录的条件手动更改字段值:
    update 表名 set 字段=值 [,…] where 过滤行记录;
    3、delete
    delete 删除数据
    delete [from] 表名 where 过滤行记录
    说明:
    1、delete 可以删除指定部分记录,删除全部记录
    2、记录上存在主外键关联时, 删除存在关联的主表的记录时,注意 参考外键约束, 约束强制不让删除先删除从表 再删除主表

Jdbc:java database connectivity java 与数据库的连接
一、角色分类
服务器 (db): a)、接收 sql b)、执行 sql c)、返回结果
客户端 (java):a)、接收数据 b)、组装sql c)、发送SQL(与数据库建立联系) d)、分析结果
二、面向接口编程
1、java 制定标准 ,不同的数据库厂商实现 接口即可。java 中提供的接口 java.sql.*包下,常用接口如下
接口名称 作用
java.sql.Connection 连接
java.sql.Statement 静态处理块
java.sql.PreparedStatement 预处理块
java.sql.ResultSet 结果集
java.sql.ResultSetMetaData 结果集元信息
2、oracle 厂商实现接口 (jar)
F:\app\Administrator\product\11.2.0\dbhome_1\jdbc\lib\ojdbc6.jar 视安装路径而定
三、jdbc 步骤
1、选择快递公司 加载驱动(完整路径)
2、与快递公司建立联系(电话号码 唯一信息) 建立连接(url 用户名 密码)
3、快递员 收包裹 创建处理块 Statement PreparedStatement
4、打包 投递 执行: execute(ddl) int executeUpdate(dml)
ResultSet executeQuery(select)
5、签收 分析结果 :ddl -->没有异常 dml—>>0 select–>分析
结果集
6、打发走人 释放资源
四、连接
1、准备工作
 引入驱动包
 构建路径 build path
 测试用户是否正确登录
2、建立连接
1)、连接字符串
驱动: oracle.jdbc.driver.OracleDriver
url: jdbc:oracle:thin:@db 服务器地址:端口:实例
连接 urljdbc:oracle:thin:@localhost:1521:orcl
用户名与密码: scott tiger
2)、编写测试类
加载驱动
a)、硬编码: new oracle.jdbc.driver.OracleDriver();
b)、软编码: class.forName(“oracle.jdbc.driver.OracleDriver”)
建立连接
Connection con =DriverManager.getConnection(“jdbc:oracle:thin:@locahost:1521:orcl”,“scott”,“tiger”)
五、处理块
1、静态处理块 Statement
Statement 是 Java 执行数据库操作的一个重要接口,用于在已经建立数据库连
接的基础上,向数据库发送要执行的 SQL 语句。Statement 对象,用于执行不带参数
的简单 SQL 语句。
执行静态 SQL 语句并返回它所生成结果的对象。
1)、创建 : 连接.Connection.createStatement()
2)、执行 :
ddl -->execute(dd语句) – 通常不会在代码中执行
dml -->executeUpdate(dml语句)
select -->executeQuery(select)
3)、特点:处理 不变的静态的 sql 语句
优点: 直接查看sql ,方便处理错误
缺点:性能不高 拼接 sql 麻烦 可能存在 sql 注入
2、预处理块 PreparedStatement
PreparedStatement 接口继承了 Statement,并与之在两方面有所不同:有人
主张,在 JDBC 应用中,如果你已经是稍有水平开发者,你就应该始终以
PreparedStatement 代替 Statement.也就是说,在任何时候都不要使用 Statement。
由于 PreparedStatement 对象已预编译过,所以其执行速度要快于 Statement
对象。因此,多次执行的 SQL 语句经常创建为 PreparedStatement 对象,以提高效率。
1)、创建:创建:连接.prepareStatement(sql)
2)、执行:
存在? ,先填充参数再执行
ddl -->execute()
dml -->executeUpdate()
select -->executeQuery()
3)、特点 :处理 不变的静态的 sql 语句 |可变的 sql 语句 带 ? 的 sql
优点:性能高,方便编写sql 不存在sql注入 安全
缺点:不能直接打印sql语句 不方便处理错误
六、分析
执行完 SQL 语句后可能成功也可能失败,如果成功,有数据则我们很大一部分情况是
需要获取查询的结果。数据就是一切
 ddl:没有异常就是成功
 dml: 结果>0就是成功
 select:分析结果集
对于 select 的结果集进行分析,类似于迭代器, 先判断(移动)再获取
next()
getXxx(索引|列名|别名)
七、释放资源
释放资源的原则是 先打开的后关闭, 则我们的顺序一般为: 结果集->处理块->连接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值