知识概要:

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学习笔记的更多相关文章

  1. JDBC 学习笔记(十一)—— JDBC 的事务支持

    1. 事务 在关系型数据库中,有一个很重要的概念,叫做事务(Transaction).它具有 ACID 四个特性: A(Atomicity):原子性,一个事务是一个不可分割的工作单位,事务中包括的诸操 ...

  2. JDBC 学习笔记(十)—— 使用 JDBC 搭建一个简易的 ORM 框架

    1. 数据映射 当我们获取到 ResultSet 之后,显然这个不是我们想要的数据结构. 数据库中的每一个表,在 Java 代码中,一定会有一个类与之对应,例如: package com.gerrar ...

  3. JDBC 学习笔记(六)—— PreparedStatement

    1. 引入 PreparedStatement PreparedStatement 通过 Connection.createPreparedStatement(String sql) 方法创建,主要用 ...

  4. JDBC学习笔记二

    JDBC学习笔记二 4.execute()方法执行SQL语句 execute几乎可以执行任何SQL语句,当execute执行过SQL语句之后会返回一个布尔类型的值,代表是否返回了ResultSet对象 ...

  5. JDBC学习笔记一

    JDBC学习笔记一 JDBC全称 Java Database Connectivity,即数据库连接,它是一种可以执行SQL语句的Java API. ODBC全称 Open Database Conn ...

  6. JDBC学习笔记(2)——Statement和ResultSet

    Statement执行更新操作 Statement:Statement 是 Java 执行数据库操作的一个重要方法,用于在已经建立数据库连接的基础上,向数据库发送要执行的SQL语句.Statement ...

  7. JDBC学习笔记(1)——JDBC概述

    JDBC JDBC API是一个Java API,可以访问任何类型表列数据,特别是存储在关系数据库中的数据.JDBC代表Java数据库连接. JDBC库中所包含的API任务通常与数据库使用: 连接到数 ...

  8. 【转】JDBC学习笔记(2)——Statement和ResultSet

    转自:http://www.cnblogs.com/ysw-go/ Statement执行更新操作 Statement:Statement 是 Java 执行数据库操作的一个重要方法,用于在已经建立数 ...

  9. 【转】JDBC学习笔记(1)——JDBC概述

    转自:http://www.cnblogs.com/ysw-go/ JDBC JDBC API是一个Java API,可以访问任何类型表列数据,特别是存储在关系数据库中的数据.JDBC代表Java数据 ...

  10. JDBC学习笔记(1)

    说明:本系列学习笔记主要是学习传智播客的李勇老师的教学课程和一本英文电子书<JDBC Recipes A Problem-Solution Approach>所作的笔记. 1,什么是JDB ...

随机推荐

  1. Mock Server 入门

    Mock Server介绍 什么是mock ? 我在去年的时候介绍一篇幅 python mock的基本使用,http://www.cnblogs.com/fnng/p/5648247.html 主要是 ...

  2. Java缓存类的实际应用场景

    不要着迷于技术,应把注意力放到问题上. 一个普通的后台管理系统,一定会有参数配置.参数配置数据表和其他的数据表是不同的,它的操作基本都是查的操作.参数配置的这些数据信息是贯穿在整个项目中,那么把他们放 ...

  3. Java基础学习——泛型

    一.泛型方法 /** 自定义泛型:自定义泛型可以理解为是一个数据类型的占位符,或者理解为是一个数据类型的变量. 泛型方法: 泛型方法的自定义格式:修饰符<声明自定义泛型>返回值类型 函数名 ...

  4. webpack2学习日志

    webpack说容易也容易,说难也难,主要还是看个人,想学到什么样的程度,很多公司可能要求仅仅是会用就行,但是也有一些公司要求比较高,要懂一些底层的原理,所以还是要花一些时间的,看个人需求.这篇仅仅是 ...

  5. UCOSii项目在NIOSii上的移植

    概览 本次使用Altera公司的NIOS II软核. 使用Quatus工具生成BSP并利用BSP打包工具生成UCOSII嵌入环境. 手动书写LCD驱动与显示函数,对UCOS II加入简单图像显示接口. ...

  6. 32位汇编第四讲,干货分享,汇编注入的实现,以及快速定位调用API的数量(OD查看)

    32位汇编第四讲,干货分享,汇编注入的实现,以及快速定位调用API的数量(OD查看) 昨天,大家可能都看了代码了,不知道昨天有没有在汇编代码的基础上,实现注入计算器. 如果没有,今天则会讲解,不过建议 ...

  7. 团队作业4——第一次项目冲刺(Alpha版本)4.25

    团队作业4--第一次项目冲刺(Alpha版本) Day four: 会议照片 每日站立会议: 项目进展 今天是项目的Alpha敏捷冲刺的第四天,先大概整理下昨天已完成的任务以及今天计划完成的任务.今天 ...

  8. 201521123077 《Java程序设计》第11周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 线程的同步(加锁防止多个线程同时访问) synchronized关键字修饰 可以使用于方法前或者方法内做同步 ...

  9. 201521123006 《java程序设计》 第14周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多数据库相关内容. 2. 书面作业 1. MySQL数据库基本操作 建立数据库,将自己的姓名.学号作为一条记录插入.(截图,需出现自 ...

  10. 《JAVA程序设计》第9周学习总结

    1. 本章学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 1.常用异常 题目5-1 1.1 截图你的提交结果(出现学号) 1.2 自己以前编写的代码中经常出现 ...