在java中,数据库存取技术可分为:
1.JDBC直接访问数据库(java访问数据库的基石,以下都是基于此的封装)
2.JDO技术
3.第三方O/R工具,eg:Hibernate、ibatis等
JDBC(Java Datebase Connectivity)
简介:是一个独立于特定数据库管理系统,通用的SQL数据库存取和操作的公共接口(一组API)。
为访问不同的数据库提供了统一的途径,可以连接任何提供了JDBC驱动程序的数据库系统。
1.数据库连接
2. Statement:操作SQL
3. ResultSet:查询结果集
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)
9.事务
数据库中:
事务:指一组逻辑操作单元,使数据从一种状态变换到另一种状态。
事务的ACID(acid)属性:
原子性(Atomicity):事务是一个不可分割的工作单元,事务中的操作要么都发生,要么都不发生。
一致性(Consistency):事务必须使数据库从一个一致性状态变换到另一个一致性状态。
隔离性(Isolation):一个事务的执行不能被其他事务干扰,即并发的各个事务之间不能互相干扰,操作数据都隔离的
持久性(Durability):一个事务一旦被提交,对数据库中数据的改变就是永久性的,其他操作和故障都不影响
JDBC中:
事务:指构成单个逻辑工作单元的操作集合
事务处理:保证所有事务都作为一个工作单元来执行,当在一个事务中执行多个操作要么都被提交,要么整个事务回滚到最初状态
事务的隔离:
多事务未隔离好导致并发问题:
脏读:A事务读取了已被B事务更新但还没提交的字段,若B回滚,A读取的内容就是临时且无效的。
不可重复读:A事务读取了一个字段,然后B事务更新了该字段,A再次读取同一字段值就不同了。
幻读:A事务从一个表读取一个字段后,B事务在该表中插入新的行,A再次读取同一个表就会多出几行。
隔离级别:一个事务与其他事务隔离的程度,隔离级别越高,数据一致性越好,并发性越弱。
Oracle仅支持(2默认,4) Mysql支持(1,2,3默认,4)
JDBC设置隔离级别:connection.setTransactionlsonlation(Connection.xxx);
Mysql设置全局隔离级别:set global transaction isolation level read committed;
查看:SELECT @@tx_isolation;
10.批量处理
简介:批量更新机制 允许多条语句一次性提交给数据库批量处理,通常情况下比单独提交处理更有效率。
11.数据库连接池
简介:为数据库连接建立一个缓冲池,预先放入一定数量的连接,需要创建数据库连接时从中取一个,用完放回去。
功能:复杂分配、管理、释放数据库连接,允许应用程序重复使用一个现有的数据库连接
DataSource:JDBC使用的数据库连接池,该接口通常由服务器(Weblogic、WebSphere、Tomat)提供实现
(也有开源组织实现:DBCP、C3P0)
DBCP:Apache下的开源连接池,Tomact的连接池也使用了该连接池实现(Commons-dbcp.jar、Commons-pool.jar)
C3P0:也是Apache下的,Hibernate推荐,支持xml方式(c3p0-xxx.jar)
注:数据库连接池的Connection对象close并没真正关闭,而是归还到连接池中
12.DBUtils
简介:Apache组织提供的对JDBC简单封装的工具类库(commons-dbutils-xxx.jar)
13.JDBC调用函数或存储过程