jdbc学习笔记
知识概要:
1.JDBC简介
2.JDBC的编码步骤
3.JDBC中常用接口或类详解
4.JDBC中释放资源
5.JDBC进行CRUD
1.JDBC简介
JDBC:Java DataBase Connectivity
数据JavaEE开发技术之一
相关的API在JDK中:java.sql.* javax.sql.*
作用:编写数据库相关代码有一个统一标准
还需要数据库的驱动
JDBC与数据库驱动是什么关系?数据库驱动实现了JDBC规范
二、JDBC的编码步骤
0、搭建开发环境:把数据库驱动jar包加入到应用的构建路径(classpath)
1、注册驱动
2、获取与数据库的连接
3、创建代表SQL语句的对象
4、执行SQL语句
5、如果执行的查询语句,返回结果集,遍历结果集
6、释放占用的资源
三、JDBC中常用接口或类详解
1、DriverManager:
1.1注册驱动
方式一:DriverManger.registDriver(new com.mysql.jdbc.Driver());
不建议使用:依赖具体的数据库驱动;导致驱动注册2次;
方式二(推荐):Class.forName(“com.mysql.jdbc.Driver”);
1.2获取与数据库的连接
方式一:
DriverManager.getConnection(String url,String username,String password);
url:数据库厂商和JDBC之间的协议
具体的url地址参考数据库的说明文档
mysql:
jdbc:mysql://localhost:3306/day15
方式二:
DriverManager.getConnection(String url,Properties props);
props:
数据库的一些参数配置
方式三:
DriverManager.getConnection(String url);
2、Connection:4天中都会用
Statement createStatement();创建代表SQL语句的对象
3、Statement
ResultSet executeQuery(String sql):sql一定要用查询语句;专门用来执行查询的
int executeUpdate(String sql):sql一般为DML(INSERT DELETE UPDATE)语句,不能执行查询语句;返回值是该条语句影响到的行数。
boolean execute(String sql):sql可以是任意语句。如果是查询语句,有结果集,返回是true;否则就是false。特别注意:并不是成功与否。
4、ResultSet
boolean next();
boolean previous();向上移动游标
boolean absolute(int count);//第一条记录就是1
void beforeFirst()把游标移动到第一行的前面
void afterLast()把游标移动到最后一行的后面
四、JDBC中释放资源
五、JDBC进行CRUD 略:
六、事务的入门案例(重点)
1、MySQL:事务默认是自动提交的。即一条语句就是出于独立的事务之中。
2、MySQL:SQL(TPL)
start transaction:开启事务。后面的语句处于同一个事务之中。
rollback:回滚。事务结束
commit:提交事务。事务结束
3、JDBC控制事务
start transaction: Connection setAutoCommite(false)
rollback Connection.rollback();
commit Connection.commit();
七、事务的特性:(原理:面试)
1、原子性:原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
2、一致性:事务必须使数据库从一个一致性状态变换到另外一个一致性状态。比如转账:转账前aaa+bbb=2000;转账后aaa+bbb=2000;
3、隔离性:事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。
4、持久性:指一个事务一旦被提交,它对数据库中数据的改变就是永久性的。
八、事务的隔离级别:(重点)
1、如果不考虑事务的隔离性,会出现什么问题?
脏读:一个线程中的事务读到了另一个线程中事务未提交的数据
不可重复读:一个线程中的事务读到了另一个线程中提交的update的数据,前后两次读到的内容不一致。
虚读:一个线程中的事务读到了另一个线程中提交的insert或delete的数据,前后读到的记录条数不一致。
2、事务的隔离级别:
READ UNCOMMITTED 脏读、不可重复读、虚读都有可能发生
READ COMMITTED 能避免脏读;不可重复读、虚读有可能发生(Oracle默认)
REPEATABLE READ 能避免脏读、不可重复读;虚读有可能发生(MySQL默认)
SERIALIZABLE 能避免脏读、不可重复读、虚读的发生
以上隔离级别:从上到下,级别越高,性能越低,数据也越安全。
MySQL:
查看当前数据库的隔离级别:
select @@tx_isolation;
更改隔离级别:(开启事务之前更改)
set transaction isolation level 四个级别之一
练习:account账户。演示脏读
|
时间 |
线程1(自己) READ UNCOMMITTED |
线程2 |
说明 |
|
t1 |
start transaction; |
||
|
t2 |
select * from account where name=’aaa’; 发现:1000块 |
||
|
t3 |
start transaction; |
||
|
t4 |
update account set money=money+100 where name=’aaa’; |
||
|
t5 |
select * from account where name=’aaa’; 发现:1100块 |
脏读发生了 |
|
|
t6 |
commit |
||
|
t7 |
commit |
演示不可重复读
|
时间 |
线程1(自己) READ COMMITTED |
线程2 |
说明 |
|
t1 |
start transaction; |
||
|
t2 |
select * from account where name=’aaa’; 发现:1000块 |
||
|
t3 |
start transaction; |
||
|
t4 |
update account set money=money+100 where name=’aaa’; |
||
|
t5 |
select * from account where name=’aaa’; 发现:1000块 |
避免了脏读 |
|
|
t6 |
commit |
||
|
t7 |
select * from account where name=’aaa’; 发现:1100块 |
发生了不可重复读 |
|
|
commit |
演示虚读
|
时间 |
线程1(自己) READ COMMITTED |
线程2 |
说明 |
|
t1 |
start transaction; |
||
|
t2 |
select * from account; 发现:3条记录 |
||
|
t3 |
start transaction; |
||
|
t4 |
insert into account values(4,’ddd’,1000); |
||
|
t5 |
commit |
||
|
t6 |
select * from account; 发现:4条记录 |
幻影数据。发生了虚读 |
|
|
t7 |
commit |
3、JDBC中设置隔离级别
Connection.setTransactionIsolation(int level);
九、丢失更新(非常普遍)
一个线程中的事务覆盖了另一个线程中已经提交的数据。
解决:利用数据库的锁机制
共享锁:可以有多把。
独占锁:(排它锁)只能有一把。只要外面有共享锁,会等。update、insert、delete会自动加独占锁。
jdbc学习笔记的更多相关文章
- JDBC 学习笔记(十一)—— JDBC 的事务支持
1. 事务 在关系型数据库中,有一个很重要的概念,叫做事务(Transaction).它具有 ACID 四个特性: A(Atomicity):原子性,一个事务是一个不可分割的工作单位,事务中包括的诸操 ...
- JDBC 学习笔记(十)—— 使用 JDBC 搭建一个简易的 ORM 框架
1. 数据映射 当我们获取到 ResultSet 之后,显然这个不是我们想要的数据结构. 数据库中的每一个表,在 Java 代码中,一定会有一个类与之对应,例如: package com.gerrar ...
- JDBC 学习笔记(六)—— PreparedStatement
1. 引入 PreparedStatement PreparedStatement 通过 Connection.createPreparedStatement(String sql) 方法创建,主要用 ...
- JDBC学习笔记二
JDBC学习笔记二 4.execute()方法执行SQL语句 execute几乎可以执行任何SQL语句,当execute执行过SQL语句之后会返回一个布尔类型的值,代表是否返回了ResultSet对象 ...
- JDBC学习笔记一
JDBC学习笔记一 JDBC全称 Java Database Connectivity,即数据库连接,它是一种可以执行SQL语句的Java API. ODBC全称 Open Database Conn ...
- JDBC学习笔记(2)——Statement和ResultSet
Statement执行更新操作 Statement:Statement 是 Java 执行数据库操作的一个重要方法,用于在已经建立数据库连接的基础上,向数据库发送要执行的SQL语句.Statement ...
- JDBC学习笔记(1)——JDBC概述
JDBC JDBC API是一个Java API,可以访问任何类型表列数据,特别是存储在关系数据库中的数据.JDBC代表Java数据库连接. JDBC库中所包含的API任务通常与数据库使用: 连接到数 ...
- 【转】JDBC学习笔记(2)——Statement和ResultSet
转自:http://www.cnblogs.com/ysw-go/ Statement执行更新操作 Statement:Statement 是 Java 执行数据库操作的一个重要方法,用于在已经建立数 ...
- 【转】JDBC学习笔记(1)——JDBC概述
转自:http://www.cnblogs.com/ysw-go/ JDBC JDBC API是一个Java API,可以访问任何类型表列数据,特别是存储在关系数据库中的数据.JDBC代表Java数据 ...
- JDBC学习笔记(1)
说明:本系列学习笔记主要是学习传智播客的李勇老师的教学课程和一本英文电子书<JDBC Recipes A Problem-Solution Approach>所作的笔记. 1,什么是JDB ...
随机推荐
- (三)、LNMP的搭建,并制作rpm包
中小型规模网站集群架构:yum仓库搭建 : 矮哥linux运维群:93324526 编译的三条命令的规则 ./configure 就是在本地创建了一个Makefile文件 (也就是指定一下各种配置参数 ...
- 介绍call和apply
function add(a, b) { alert(a + b); } function sub(a, b) { alert(a - b); } add.call(sub, 1,3); //4 传 ...
- 【1414软工助教】团队作业4——第一次项目冲刺(Alpha版本) 得分榜
题目 团队作业4--第一次项目冲刺(Alpha版本) 作业提交情况情况 所有团队都在规定时间内完成了七次冲刺. 往期成绩 个人作业1:四则运算控制台 结对项目1:GUI 个人作业2:案例分析 结对项目 ...
- 201521123112《Java程序设计》第4周学习总结
1. 本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点 1.2 使用常规方法总结其他上课内容 关于多态,多态性就是相同的形态,不同的定义.在简单点说的话就是不同类的对象对同一个消息作出的相应 ...
- 201521123015 《Java程序设计》第2周学习总结
1.本章学习总结 (1)学习了枚举,数组等方法 (2)通过实验内容的讲解,解决了一些问题 (3)进一步运用和了解码云 书面作业 1.使用Eclipse关联jdk源代码,并查看String对象的源代码( ...
- Win8打开chm右侧空白解决方法
Win8下打开CHM文件,左侧有目录,但是右侧空白.而且打开的时候,还弹出很多IE窗口. 感觉应该不是文件本身的问题.下面是我的解决方法,其他系统也可以试一试. 最初打开文件如下 首先:1,右键关联c ...
- 关于百度DNS的解析过程
if现在我用一台电脑,通过ISP接入互联网,那么ISP就会分配给我一个DNS服务器(非权威服务器). now,我的computer向这台ISPDNS发起请求查询www.baidu.com. 首先,IS ...
- Java 课程设计 "Give it up"小游戏(团队)
JAVA课程设计 "永不言弃"小游戏(From :Niverse) 通过Swing技术创建游戏的登陆注册界面,使用mySQL数据库技术完成用户的各项信息保存和游戏完成后的成绩保存. ...
- 201521123098 《Java程序设计》第10周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 2. 书面作业 本次PTA作业题集异常.多线程 1. finally 题目4-2 1.1 截图你的提交结果( ...
- 201521123114《Java程序设计》第9周学习总结
1. 本章学习总结 2. 书面作业 Q1. 常用异常 题目5-1 1.1 截图你的提交结果(出现学号) 1.2 自己以前编写的代码中经常出现什么异常.需要捕获吗(为什么)?应如何避免? 经常出现的异常 ...