JDBC基本知识总结

一、JDBC简介

1、JDBC是SUN公司为了简化操作数据推出一套规范。数据库厂商的驱动就是对JDBC的实现。

2、Java Data Base Connectivity(java数据库连接),它主要由接口组成。

java.sql.*    javax.sql.*   JDK中

数据库的驱动jar包

二、JDBC的编码步骤

0、前提:拷贝数据库的驱动到构建路径中(classpath)

1、注册驱动

2、获取与数据库的链接

3、创建代表SQL语句的对象

4、执行SQL语句

5、如果是查询语句,需要遍历结果集

6、释放占用的资源

三、JDBC中常用的接口详解

1、DriverManager:

作用:

a、注册驱动:

方式一:(不建议使用)

DriverManager.registerDriver(new com.mysql.jdbc.Driver());

原因:1、依赖具体驱动。2、导致驱动注册2遍

方式二:(建议)

Class.forName("com.mysql.jdbc.Driver");

 

b、获取与数据库的链接

    url:SUN和数据库厂商间的协议。具体查阅数据库的文档。

         public static Connection getConnection(String url,String user,Stringpassword)

                                                                       throws SQLException

          public static Connection getConnection(String url,Properties info)

                                                                       throws SQLException

           public static Connection getConnection(String url)

                                                                       throws SQLException

2、Connection

所有的数据库操作都是基于链接之上的。

Statement createStatement():创建向数据库发送sql的statement对象。

3、Statement

作用:代表SQL语句对象。可以向数据库发送任何的SQL语句

ResultSetexecuteQuery(String sql):sql一般都是查询语句

int executeUpdate(Stringsql):sql一般是DML语句。insert update delete。返回值,操作几条记录。

boolean execute(String sql):sql可以是任意的语句。返回值不是代表成功与否。如果是查询语句,就有结果集,返回true。没有返回结果集的,返回false。

4、ResultSet

作用:封装了查询的结果集

boolean next():游标下移。返回值是有无记录

boolean previous():游标上移。

boolean absolute(int count):定位到指定的行。第一行是1。

void beforeFirst():移动游标到第一行的前面。

void afterLast():移动游标到最后一行的后面。

四、事务入门(重点)

1、MySQL:每一条语句都属于独立事务,默认自动管理的。

2、开启事务:start transaction;   日后的语句都会处于同一个事务之中。

提交事务:commit;

回滚事务:rollback;

3、JDBC如何控制事务

五、事务的特性(重点)

1、事务的特性(ACID):

原子性:处于事务中的多条语句是不可分割的。

一致性:事务必须使数据库从一个一致性状态变换到另外一个一致性状态。比如:转账,转账前A+B=2000,转账后A+B=2000

隔离性:多线程并发。一个事务不能被其他线程中的事务所打扰。

持久性:事务一旦提交,永久保存起来。

2、事务的隔离级别:属于事务的。都已开启了事务为前提。

不考虑事务的隔离级别,会出现以下情况(是错的)

  1. 脏读:一个线程中的事务读到了另外一个线程中未提交的数据。
  2. 不可重复读:一个线程中的事务读到了另外一个线程中已经提交的update的数据。
  3. 虚读:一个线程中的事务读到了另外一个线程中已经提交的insert的数据。

要想避免以上现象,通过更改事务的隔离级别来避免:

  1. READ UNCOMMITTED 脏读、不可重复读、虚读有可能发生。
  2. READ COMMITTED 避免脏读的发生,不可重复读、虚读有可能发生。
  3. REPEATABLE READ 避免脏读、不可重复读的发生,虚读有可能发生。
  4. SERIALIZABLE 避免脏读、不可重复读、虚读的发生。

级别依次升高,效率依次降低。

MySQL:默认REPEATABLE READ

ORACLE:默认READ COMMITTED

MySQL:

select @@tx_isolation;//查看当前的隔离级别

set transaction isolation level 级别;// 设置当前的事务隔离级别

练习:read uncommitted;

时间

T1

T2

说明

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

select * from account where name='aaa';

有1100块

 

读到了另外一个线程中提交的update数据:不可重复读

t8

select count(*) from account;

有3条记录

 

 

t9

 

insert into account values(4,'ddd',1000);

 

t10

select count(*) from account;

有4条记录

 

读到了另外一个线程中提交的insert数据:虚读(幻读)

t11

commit;

 

 

六、常用的数据库操作框架

1、ORM:Object Relation Mapping

Hibernate:非常流行

JPA:Java Persistent API.ORM标准

MyBatis:2010年开始。之前叫做iBatis(重视)

2、JDBC封装框架

DBUtils

Spring JDBC Template

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值