JDBC

作者: jadefly | 来源:发表于2019-03-28 13:24 被阅读0次

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

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

    2.JDO技术

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

    JDBC(Java Datebase Connectivity)

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

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


    1.数据库连接

    数据库连接

    2. Statement:操作SQL

    Statement

    3. ResultSet:查询结果集

    ResultSet

    4. PreparedStatement

    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)   

    DBCP

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

    C3P0

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


    12.DBUtils

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

    DBUtils

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

    函数调用

    相关文章

      网友评论

          本文标题:JDBC

          本文链接:https://www.haomeiwen.com/subject/dzelvqtx.html