快速业务通道

Java连结数据库内幕 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-22

Java连结数据库内幕

时间:2010-12-17

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  {   ...  }

Java连结数据库内幕(2)

时间:2010-12-17

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);     ...    }  }

4 结构图:

Java连结数据库内幕 - 编程入门网

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号