JDBC

在java中,数据库存取技术可分为:

1.JDBC直接访问数据库(java访问数据库的基石,以下都是基于此的封装)

2.JDO技术

3.第三方O/R工具,eg:Hibernate、ibatis等

JDBC(Java Datebase Connectivity)

简介:是一个独立于特定数据库管理系统,通用的SQL数据库存取和操作的公共接口(一组API)。

           为访问不同的数据库提供了统一的途径,可以连接任何提供了JDBC驱动程序的数据库系统。


1.数据库连接

JDBC_第1张图片
数据库连接

2. Statement:操作SQL

JDBC_第2张图片
Statement

3. ResultSet:查询结果集

JDBC_第3张图片
ResultSet

4. PreparedStatement

JDBC_第4张图片
PreparedStatement

5.DAO

简介:Data Access Object 访问数据信息的类,包含了对数据的CRUD而不包含任何业务相关的信息。

功能:实现功能模块化,利于代码维护升级


6.元数据

DatabaseMetaData:描述数据库的元数据,可获取数据库的基本信息。通过Connection得到

ResultSetMetaData:描述结果集的元数据,通过ResultSet.getMetaData()得到

                                   getColumnCount();//获取列数(字段)

                                   getColumnName(i);//获取第i列的列名(从1开始)

                                   getColumnLabel(i);//获取第i列的别名(从1开始)


7.获取数据库自动生成的主键

获取主键

8.LOB(Large Objects)

简介:大对象,用来存储大量的二进制和文本数据的一种数据类型(一个LOB字段可存储多达4GB的数据)

分类:内部LOB:将数据以字节流的形式存储在数据库内部(可参与事务、或像普通数据一样备份恢复)

                             Oracle支持三种类型的内部LOB

                             BLOB:二进制数据,适用于大量二进制数据如图像、视频、音频、文件等

                             CLOB:单字节字符数据,适用于存储超长的文本数据

                             NCLOB:多字节字符数据,适用于存储超长的文本数据

           外部LOB:数据库内只存位置信息 ,数据实体以外部文件形式存在于操作系统的文件系统中(只读、不参与事务)

                             目前只支持一种外部LOB:BFILE类型,适用于帮助用户管理大量的由外部程序访问的文件

BLOB:MySQL中BLOB是一个二进制大型对象,提供了四种类型(除存储最大量不同外其他均等同)

              TinyBlob(最大255)、Blob(最大65K)、MediumBlob(最大16M)、LongBlob(最大4G)

JDBC_第5张图片
数据库插入读取大对象

9.事务

数据库中:

事务:指一组逻辑操作单元,使数据从一种状态变换到另一种状态。

事务的ACID(acid)属性:

        原子性(Atomicity):事务是一个不可分割的工作单元,事务中的操作要么都发生,要么都不发生。

        一致性(Consistency):事务必须使数据库从一个一致性状态变换到另一个一致性状态。

        隔离性(Isolation):一个事务的执行不能被其他事务干扰,即并发的各个事务之间不能互相干扰,操作数据都隔离的

        持久性(Durability):一个事务一旦被提交,对数据库中数据的改变就是永久性的,其他操作和故障都不影响

JDBC中:

事务:指构成单个逻辑工作单元的操作集合

事务处理:保证所有事务都作为一个工作单元来执行,当在一个事务中执行多个操作要么都被提交,要么整个事务回滚到最初状态

JDBC_第6张图片
提交与回滚

事务的隔离:

多事务未隔离好导致并发问题:

        脏读:A事务读取了已被B事务更新但还没提交的字段,若B回滚,A读取的内容就是临时且无效的。

        不可重复读:A事务读取了一个字段,然后B事务更新了该字段,A再次读取同一字段值就不同了。

        幻读:A事务从一个表读取一个字段后,B事务在该表中插入新的行,A再次读取同一个表就会多出几行。

隔离级别:一个事务与其他事务隔离的程度,隔离级别越高,数据一致性越好,并发性越弱。

                  Oracle仅支持(2默认,4)        Mysql支持(1,2,3默认,4)

JDBC_第7张图片
隔离级别

JDBC设置隔离级别:connection.setTransactionlsonlation(Connection.xxx);

Mysql设置全局隔离级别:set global transaction isolation level read committed;

                               查看:SELECT @@tx_isolation;


10.批量处理

简介:批量更新机制 允许多条语句一次性提交给数据库批量处理,通常情况下比单独提交处理更有效率。

JDBC_第8张图片
批量处理

11.数据库连接池

简介:为数据库连接建立一个缓冲池,预先放入一定数量的连接,需要创建数据库连接时从中取一个,用完放回去。

功能:复杂分配、管理、释放数据库连接,允许应用程序重复使用一个现有的数据库连接

DataSource:JDBC使用的数据库连接池,该接口通常由服务器(Weblogic、WebSphere、Tomat)提供实现    

                        (也有开源组织实现:DBCP、C3P0)

DBCP:Apache下的开源连接池,Tomact的连接池也使用了该连接池实现(Commons-dbcp.jar、Commons-pool.jar)   

JDBC_第9张图片
DBCP

C3P0:也是Apache下的,Hibernate推荐,支持xml方式(c3p0-xxx.jar)

JDBC_第10张图片
C3P0

注:数据库连接池的Connection对象close并没真正关闭,而是归还到连接池中


12.DBUtils

简介:Apache组织提供的对JDBC简单封装的工具类库(commons-dbutils-xxx.jar)

JDBC_第11张图片
DBUtils

13.JDBC调用函数或存储过程

JDBC_第12张图片
函数调用

你可能感兴趣的:(JDBC)