中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > Java > 数据库
JDBC到底是怎么连上数据库的?
作者:jdeveloper 时间:2006-09-26 10:35 出处:JAVA中文站 责编:月夜寒箫
              摘要:JDBC到底是怎么连上数据库的?
java.sql包中的 java.sql.Driver, jdbc.sql.Connection等提供给程序开发人员统一的开发接口


数据库提供商提供相应的实现,对程序开发人员来讲只要知道这些接口都有哪些方法就可以了


但我们可以深入一些 看看到底这里面都做了那些事, 同时也可以学习其中的编程模式(如Interface模式等)



1 Class.forName(String classname) 的源码为:


public final


class Class implements java.io.Serializable {


...


public static Class forName(String className)


throws ClassNotFoundException {


return forName0(className, true, ClassLoader.getCallerClassLoader());


}


...


}


关于forName0 请自己查看jdk source.


目的是把指定的Class装载到JVM中来。(注意class的装载、初始化过程)


在装载过程中将执行被装载类的static块(如下)


2 sun的JdbcOdbcDriver 源码:


public class JdbcOdbcDriver extends JdbcOdbcObject


implements JdbcOdbcDriverInterface


{


...


/**


* connect to DB


*/


public synchronized Connection connect(String s, Properties properties)


throws SQLException


{


if(JdbcOdbcObject.isTracing())


JdbcOdbcObject.trace("*Driver.connect (" + s + ")");


if(!acceptsURL(s))


return null;


if(hDbc != 0)


{


disconnect(hDbc);


closeConnection(hDbc);


hDbc = 0;


}


if(!initialize())


{


return null;


}


else


{


JdbcOdbcConnection jdbcodbcconnection = new JdbcOdbcConnection(OdbcApi, hEnv, this);


jdbcodbcconnection.initialize(getSubName(s), properties, DriverManager.getLoginTimeout());


jdbcodbcconnection.setURL(s);


return jdbcodbcconnection;


}


}


static


{


if(JdbcOdbcObject.isTracing())


JdbcOdbcObject.trace("JdbcOdbcDriver class loaded");


JdbcOdbcDriver jdbcodbcdriver = new JdbcOdbcDriver();


try


{


DriverManager.registerDriver(jdbcodbcdriver);


}


catch(SQLException sqlexception)


{


if(JdbcOdbcObject.isTracing())


JdbcOdbcObject.trace("Unable to register driver");


}


}


}


public interface JdbcOdbcDriverInterface


extends Driver


{


...


}


3 连接过程


jdbc.sql.Connection con =


DriverManager.getConnection("jdbc:odbc:pubs","sa","");


public class DriverManager {


public static synchronized Connection getConnection(String url,


String user, String password) throws SQLException {


java.util.Properties info = new java.util.Properties();


// Gets the classloader of the code that called this method, may


// be null.


ClassLoader callerCL = DriverManager.getCallerClassLoader();


if (user != null) {


info.put("user", user);


}


if (password != null) {


info.put("password", password);


}


return (getConnection(url, info, callerCL));


}


private static synchronized Connection getConnection(


String url,


java.util.Properties info,


ClassLoader callerCL) throws SQLException


{


...


Connection result = di.driver.connect(url, info);


...


}


}

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有