结构图

核心对象

Driver

Java通过Driver接口表示驱动,每种类型的数据库通过实现Driver接口提供自己的Driver实现类。

Driver由属性,操作,事件三部分组成。

属性

公共属性

版本号:版本号由两个字段主版本号(majorVersion)和副版本号(minorVersion)组成。

特殊属性

DriverPropertyInfo对象:它有四个字段,name表示属性名称,value表示属性值,required。表示是否是必要属性,description表示对属性的描述。

事件

DriverAction接口表示Driver相关事件,该接口只有一个方法deregister,该方法没有参数。

在Driver注册到DriverManager时指定DriverAction,在DriverManager撤销Driver时,会调用该DriverAction的deregeister方法。示例如下

 DriverManager.registerDriver(driver, new TDriverAction());
DriverManager.deregisterDriver(driver);

操作

获取属性

  1. getMajorVersion:获取驱动的主版本号
  2. getMinorVersion:获取驱动的副版本号
  3. getPropertyInfo(url,prop):参数url表示建立连接时所需的地址,格式为jdbc:subprotocol:subname。

jdbc表示是一个固定的字符串,表示是遵从jdbc规范的。

subprotocol表示连接数据库的方式,例如Oracle数据库oracle:thin的方式。

subname表示标识数据库,格式为@ip:port/ dbname ? option。ip用来表示数据库服务器的IP地址,port表示端口号,一般为1521,dbname表示数据库schema的名称,option用来表示连接时的其他参数,如编码集,超时时间等等。

示例:jdbc:oracle:thin:@localhost:1521/test。

参数prop表示连接时的属性,例如必要属性用户名和密码,也可以包含其他可选参数,例如编码集等。该方法返回类型为DriverPropertyInfo数组。

将所有参数都放入prop是一种比较友好的方式,当然也可以将属性以key=value的形式拼接到url当中,这种方式不推荐使用。

连接

  1. acceptUrl(url):通过此url建立连接,成功返回true,失败返回false。
  2. jdbcCompliant:该连接是否遵循jdbc规范,url以jdbc开头则返回true,否则返回false。
  3. connect(url,prop):参数url表示连接地址,prop表示连接属性。返回Connection对象

DriverManager

Driver Manager作用为管理驱动,设置日志,建立连接。它的所有方法都是静态的。

管理驱动

管理驱动包括注册驱动,撤销驱动,查询注册成功的驱动。

注册

registerDriver(driver):参数driver表示驱动类

registerDriver(driver,driverAction):参数driver表示驱动类,driverAction表示实现DriverAction接口的实现类,该接口有方法deregister方法,当撤销驱动时,会调用该方法。

撤销

deregisterDriver(driver):参数driver表示驱动类。

查询

getDriver(url):根据url查询driver,参数url表示建立连接url。

getDrivers:查询所有驱动,返回值为Enumeration<Driver>。

设置日志

设置日志的输出流,日志主要记录加载驱动,撤销驱动等事件。

  1. println(message):向日志输出流中打印message,参数message为str类型。
  2. setLogWriter(printWriter):设置日志输出流为printWriter,参数printWriter为PrintWriter对象的实例。
  3. getLogWriter():返回日志输出流。

建立连接

Driver Manager 建立连接是通过调用它所管理驱动对象的连接方法。它会遍历驱动集合,调用驱动对象的连接方法,如果某个驱动连接成功之后,则停止遍历,返回该驱动连接成功之后的Connection对象。

  1. getConnection(url):参数url为建立连接的Url,该url上需要有必要参数。
  2. getConnection(url,prop):url含义同上,prop为Properties对象,封装必要参数。
  3. getConnection(url,user,password):url含义同上,参数user为用户名,password为密码。

设置超时时间

  1. setLoginTImeout(time):参数time为超时时间,单位为秒。默认为0,表示没有限制。
  2. getLoginTimeout。获取超时时间。

Connection

用户连接数据库之后,会创建Connection对象。Connection对象表示与数据库的连接。 连接会话包括执行的SQL语句和通过该连接返回的结果。 单个应用程序可以与单个数据库具有一个或多个连接,或者可以连接许多不同的数据库。

Connection对象的作用有获取信息,创建执行SQL的对象,控制事务,数据类型映射。

  1. 获取信息:这些信息主要包括数据库的信息,用户的信息。DatabaseMetaData对象用来表示数据库的相关信息,调用getDataBaseMetaData方法得到。用户信息通过调用getClientInfo方法得到,它的返回值是Properties对象。
  2. XXStatement对象:执行SQL的对象有三种,statement,preparedStatement,Callablestatement。
  3. 事务:Connection对象可以获取和设置事务的隔离级别,可以为事务存档(SavePoint),可以提交事务,回滚事务。
  4. 数据类型映射:建立数据库数据类型与Java数据类型的映射关系,Connection对象通过Map<String,Class<?>>来记录彼此之间的映射关系,其中key值为数据库数据类型,Class<?>为Java数据类型。

创建Connection对象

创建Connection对象的方式有三种,Driver的方式DriverManager的方式DataSource的方式

种类

  1. Connection:普通Connection接口,每次请求都需要重新创建Connection对象。例如驱动方式创建的Connection对象
  2. PooledConnection:建立连接池,每次请求都是在连接池中获取Connection对象,请求结束之后Connection对象被连接回收。只能通过DataSource的方式创建。
  3. XAConection:继承自PooledConnection,为分布式应用提供支持的Connection对象。只能通过DataSource的方式创建。

获取信息

Connection对象可以获取数据库的相关信息,客户端的相关信息。

DatabaseMetaData

TODO

客户端

  1. getClientInfo:返回客户端信息,返回类型为Properties对象
  2. getClientInfo(name):在客户端信息中根据name获取value值。
  3. setClientInfo(name,value):设置客户端信息name的值为value。
  4. setClientInfo(prop):参数prop为Properties对象,将Prop对象中的键值对添加到客户端信息中。

创建Statement对象

创建statement的三种方式

createStatement(resultSetType,resultSetConcurrency,resultSetHoldability)

参数resultType表示结果集的遍历类型,

    1. 当为ResultSet.TYPE_FORWARD_ONLY,表示结果集只能从前往后遍历,这也是默认的方式。
    2. 当为ResultSet.TYPE_SCROLL_SENSITIVE时,表示当数据库发生改变时,这些改变会同步到结果集当中,当结果集改变时,也能同步到数据库当中。
    3. 当为ResultSet.TYPE_SCROLL_INSENSITIVE时,表示数据库改变不会同步到结果集中,反之亦然。

参数resultSetConcurrency表示结果集的读取类型:

    1. ResultSet.CONCUR_UPDATABLE时,表示结果集是可以更新的。
    2. ResultSet.CONCUR_READONLY表示结果集是只读类型的,这种方式是默认的方式。

参数resultSetHoldability表示结果集是否随着事务的提交而关闭,

    1. CLOSE_CURSORS_AT_COMMIT表示结果集在是事务提交之后就关闭,
    2. CLOSE_CURSORS_OVER_COMMIT表示结果集不随事务提交而关闭。

createStatement(resultSetType,resultSetConcurrency):参数含义同上。

createStatement:创建默认的statement对象,resultSetType的默认值为ResultSet.TYPE_FORWARD_ONLY,resultSetConcurrency的默认值为ResultSet.CONCUR_READONLY。

创建PreparedStatement的六种方式

  1. prepareStatement(sql):参数sql表示SQL语句,因为有预编译过程,所以sql是必要参数
  2. prepareStatement(sql,resultSetType,resultSetConcurrency):参数含义与Statement相同
  3. prepareStatement(sql,resultSetType,resultSetConcurrency,resultSetHoldability):参数含义与Statement相同。
  4. prepareStatemtent(sql,autoGeneratedKey):参数autoGeneratedKey只有为insert语句时有效,含义TODO,Statement.RETURN_GENERATED_KEYS时表示返回自动生成的主键,Statement.NO_GENERATED_KEYS表示不返回自动生成的主键。
  5. prepareStatement(sql,columnIndex[]):参数columnIndex表示列索引数组,类型为int数组,列索引从1开始,超出会报错。
  6. prepareStatement(sql,columnName[]):参数columnName表示列名称数组,类型为String数组。指定名称不存在会出错。

创建CallableStatement的三种方式

  1. prepareCall(sql):参数含义与PreparedStatement相同
  2. prepareCall(sql,resultSetType,resultSetConcurrency):参数含义与PreparedStatement相同。
  3. prepareCall(sql,resultSetType,resultSetConcurrency,resultSetHoldability):参数含义与PreparedStatement相同。

事务

提交方式

  1. getAutoCommit:事务是否是自动提交,创建Connection对象时事务默认的提交方式。
  2. setAutoCommit(boolean):参数值为false,表示关闭自动提交,参数值为true表示为自动提交的方式。

隔离级别

  1. getTransactionIsolation:返回事务隔离级别对应的int值。
  2. setTransactionIsolation(level):参数level表示事务的隔离级别。事务的隔离级别有五种类型
  • TRANSACTION_NONE:表示不支持事务。值为0,
  • TRANSACTION_READ_UNCOMMITED:表示一个事务可以读取另外事务未提交的数据。存在脏读。值为1
  • TRANSACTION_READ_COMMITED:表示只读取已提交的数据。防止脏读。存在重复读,幻读。值为2
  • TRANSACTION_REPEATABLE_READ:表示在读取过程中不允许修改操作。防止一个事务多次查询得到不同的值。防止脏读,重复读,存在虚读。值为4
  • TRANSACTION_SERIALIZABLE:TODO,值为8.

脏读:存在两个事务A,B。A事务正在修改数据,B事务正在读取数据,B事务读取数据时读取到A未提交的事务。例如A事务执行了更新操作,而未提交,此时B事务读取到了这些更新操作。

重复读:B事务读取到的都是已经提交的数据。在B事务读取过程中,A事务在修改相同的数据,导致B事务读取过程中每次读取返回的结果不一致。

幻读:TODO。

存档

  1. setSavepoint:设置存档点。返回Savepoint对象
  2. setSavepoint(name):参数name表示存档点的名称,返回Savepoint对象。
  3. rollback(savepoint):回滚到savepoint存档处,参数savepoint表示Savepoint对象。
  4. releaseSavepoint(savepoint):在当前事务中移除存档点。

SavePoint

  1. getSavepointId:获取Savepoint对象的Id。只有调用setSavepoint方法返回的Savepoint对象才有此值。
  2. getSavepointName:获取Savepoint对象的名称。只有调用setSavepoint(name)方法返回的Savepoint对象才有此值。

数据映射

TODO

DataSource

数据源的种类有三种,DataSource,ConnectionPoolDataSource,XADataSource,CommonDataSource,提供数据源的公共方法(设置输出流和连接超时时间)。

种类

CommonDataSource

  1. getLoginTime:
  2. setLoginTime(seconds):设置连接超时时间,单位为秒
  3. getLogWriter:获取日志输出流
  4. setLogWriter(printWriter):设置日志输出流
  5. getParentLogger:返回Logger对象。

DataSource

  1. getConnection
  2. getConnection(user,password):参数user表示用户名,password表示密码。

ConnectionPoolDataSource

  1. getPooledConnection:含义与getConnection方法相同,返回对象为PooledConnection
  2. getPooledConnection(user,password)。

PooledConnection

  1. addConnectionEventListener(connectionEventListener):添加连接监听器,监听器有两个方法ConnectionClosed,关闭连接时触发,connectionErrorOccured,连接出现异常时触发。
  2. removeConnectionEventListener:移除连接监听器
  3. addStatementEventListener(statementEventListener):添加Statement监听器,监听器有两个方法StatementClosed,statement关闭时触发,statementErrorOccured,statement出现异常时触发。
  4. removeStatementEventListener:移除Statement监听器
  5. getConnection:返回Connection对象
  6. close:关闭连接。

XADataSource

  1. getXAConnection:含义与getConnection方法相同,返回对象为XAConnection。分布式的连接不能在程序中调用commit,rollback等方法。并设置autoCommit为false。
  2. getXAConnection(user,password)

XAConnection

  1. getXAResource:返回XAResource对象。用来管理XAConnection对象。

XAResource

TODO

数据库程序接口——JDBC——API解读第一篇——建立连接的核心对象的更多相关文章

  1. 数据库程序接口——JDBC——API解读第二篇——执行SQL的核心对象

    结构图 核心对象 Statement Statement主要用来执行SQL语句.它执行SQL语句的步骤为: 第一步:创建statement对象. 第二步:配置statement对象,此步骤可以忽略. ...

  2. 数据库程序接口——JDBC——API解读第三篇——处理结果集的核心对象

    核心对象 处理结果集的核心对象有ResultSet和RowSet.其中ResultSet指定关系型数据库的结果集,RowSet更为抽象,凡是由行列组成的数据都可以. ResultSet ResultS ...

  3. 数据库程序接口——JDBC——功能第四篇——事务之Spring事务

    综述 事务的实现方式有三种,JTA,Spring事务,Web Container方式.本篇讲述Spring事务. Spring事务分为两个部分核心对象,Spring事务的实现方式. Spring事务实 ...

  4. 数据库程序接口——JDBC——功能第五篇——批量处理

    综述 批量处理一般指批量插入,批量更新,删除通过可以指定where条件实现.批量插入的实现方式有三种类型.statement,preparedStatement,callableStatement. ...

  5. 数据库程序接口——JDBC——功能第一篇——第一个程序

    流程图 综述 从零开始搭建JDBC环境.通过创建Java项目,在项目中,通过java程序执行SQL,并处理返回的结果.本文通过执行 select 1 from dual 语句来测试,并输出相结果集.首 ...

  6. 数据库程序接口——JDBC——初篇——目录

    目录 建立连接 核心对象 Driver DriverManager Connection DataSource 常用功能 第一个程序 C3P0数据源 DBCP数据源 事务之Spring事务 执行SQL ...

  7. 数据库程序接口——JDBC——功能第二篇——数据源之C3P0数据源

    综述 C3P0由三部分内容组成.实例化对象,各配置项的含义,以及加载配置项的方式. 实例化对象的方式有三种,第一种方式直接new ComboPooledDataSource,第二种方式使用工厂类Dat ...

  8. 程序员小张的第一篇博文 --记Markdown的使用学习

    1.前言 为了即将到来的面试做准备,以及记录一下平日里自己的学习过程和生活日常,我开始进驻博客园啦!这就是我的第一篇博客(有点小激动)~ 作为一只新手,首先记录一下今晚的编写博文的学习过程吧~ 2.使 ...

  9. API 练习 第一篇

    练习API   CreateSemaphoreCreateEvent ReleaseSemapWaitForSingleObject  CloseHandleInitializeCriticalSec ...

随机推荐

  1. [CF546C] Soldier and Cards - 模拟

    两个人玩牌,首先两个人都拿出自己手牌的最上面的进行拼点,两张拼点牌将都给拼点赢得人,这两张牌放入手牌的顺序是:先放对方的牌再放自己的.若最后有一个人没有手牌了,那么他就输了,求输出拼点的次数和赢得人的 ...

  2. Harvard's CS50

    最近看了哈佛大学David主讲的计算机科学入门,给我一个最大的感受是计算机编程语言真的不重要,重要的是编程者的思想. 1.同一个问题可以就Scratch解决,也可以用C,用Python,用JavaSc ...

  3. AntDesign(React)学习-13 Warning XX should not be prefixed with namespace XXX

    有篇UMI入门简易教程可以看看:https://www.yuque.com/umijs/umi/hello 程序在点击操作时报了一个Warning: [sagaEffects.put] User/up ...

  4. C# ODP.Net oracle数据库操作 支持不安装客户端

    下载: http://download.oracle.com/otn/other/ole-oo4o/ODTwithODAC1110720.zip?AuthParam=1414811820_e61f2f ...

  5. PP: Overviewing evolution patterns of egocentric networks by interactive construction of spatial layouts

    Problem: get an overall picture of how ego-networks evolve is a common challenging task. Existing te ...

  6. 解决问题:SVN重命名后,不允许提交

    第一步:选中要修改的文件,右键,修改文件名称,具体操作如下图所示 第二步:提交,提交时,不要提交修改的文件,在上一层文件夹上提交

  7. SpringBoot开发快速入门

    SpringBoot开发快速入门 目录 一.Spring Boot 入门 1.Spring Boot 简介 2.微服务 3.环境准备 1.maven设置: 2.IDEA设置 4.Spring Boot ...

  8. electron聊天室|vue+electron-vue仿微信客户端|electron桌面聊天

    一.项目概况 基于Electron+vue+electron-vue+vuex+Nodejs+vueVideoPlayer+electron-builder等技术仿制微信电脑端界面聊天室实例,实现消息 ...

  9. Makefile文件(DE1-soc软件实验”hello_word")

    DE1-soc软件实验”hello_word"中,hello_word此程序很好理解,那Makefile文件又如何理解呢? 所要完成的Makefile 文件描述了整个工程的编译.连接等规则. ...

  10. 题解【洛谷P3951】[NOIP2017]小凯的疑惑

    题目描述 小凯手中有两种面值的金币,两种面值均为正整数且彼此互素.每种金币小凯都有 无数个.在不找零的情况下,仅凭这两种金币,有些物品他是无法准确支付的.现在小 凯想知道在无法准确支付的物品中,最贵的 ...