首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

JDBC学习之-Connection(1)

2013-04-09 
JDBC学习之-Connection(一)JDBC是作为连接数据库的渠道之一,封装了一些与数据库交互的接口。看了一些源码,

JDBC学习之-Connection(一)

JDBC是作为连接数据库的渠道之一,封装了一些与数据库交互的接口。看了一些源码,现在就来探寻一下JDBC的原理。

JDK中给了几个接口比如说Connection,Statement,ResultSet。这些都是在用JDBC中比较常用的接口,这些接口定义了与数据库的交互规则。具体的实现都由具体的类库或者厂商实现。目前比较常用的数据库有Mysql,Oracle,Sql Server。这些具体的数据库所实现的通信协议都会有差异。而JDBC就需要屏蔽这些差异,对外提供一个统一而且简单的接口。对于使用者而言,他只要关心如何创立连接,而不需要关心里面的具体通信协议。如果看源码就会知道其内部都是用TCP/IP通信协议进行通信,如果自己要实现一个JDBC这样的API的话则需要了解具体的数据库的通信协议。但是这些都不是程序员需要关心的事情。他们更加关心偏业务的事情。比如我一条SQL语句简单的提交就可以实现对数据库的增删改查,如何用已有的接口实现事务的回滚。

好了,废话不多讲。先看看一个重量级的接口Connection。顾名思议,连接,和数据库交互最基本的就是要和数据库建立连接。这个对象并非我们简单的new出来,而是由一个叫做DriverManager的管理者给我们创建好的。先上传一张Connection创建的时序图,时序图中完整的描述出一个Connection的创建。

JDBC学习之-Connection(1)

    

public java.sql.Connection connect(String url, Properties info)throws SQLException {if (url != null) {if (StringUtils.startsWithIgnoreCase(url, LOADBALANCE_URL_PREFIX)) {return connectLoadBalanced(url, info);} else if (StringUtils.startsWithIgnoreCase(url,REPLICATION_URL_PREFIX)) {return connectReplicationConnection(url, info);}}Properties props = null;if ((props = parseURL(url, info)) == null) {return null;}try {Connection newConn = com.mysql.jdbc.ConnectionImpl.getInstance(host(props), port(props), props, database(props), url);//这里终于可以看到具体的Connection实现类。return newConn;} catch (SQLException sqlEx) {// Don't wrap SQLExceptions, throw// them un-changed.throw sqlEx;} catch (Exception ex) {SQLException sqlEx = SQLError.createSQLException(Messages.getString("NonRegisteringDriver.17") //$NON-NLS-1$+ ex.toString()+ Messages.getString("NonRegisteringDriver.18"), //$NON-NLS-1$SQLError.SQL_STATE_UNABLE_TO_CONNECT_TO_DATASOURCE);sqlEx.initCause(ex);throw sqlEx;}}

一个比较粗略的Connection就这样创建好了。这里屏蔽了很多的细节,只是一些主干的代码。有兴趣的可以看看具体的源码,里面Connection是如何建立连接的,Connection又有哪些其他的功能都可以去研究。


热点排行