JDBC是如何连接数据库的?

原创 2001年04月20日 10:34:00

jdbc.sql.Driver d =
            (Driver)Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");         jdbc.sql.Connection con =
            DriverManager.getConnection("jdbc:odbc:pubs","sa",""); 

以上的语句您已经很熟了吧 但
 到底是怎么连上数据库的?:-)

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);
...
}             
}
4  结构图:
请点击查看 结构图   http://jdeveloper.myrice.com/doc/jdbc/images/howjdbc.jpg

请到 http://jdeveloper.myrice.com/ 看更多的Java文章

JDBC连接数据库的几种方法与简单解析

首先要知道jdbc:使用Java代码发送sql语句的技术就是jdbc技术。即jdbc是一个接口,用于不同的数据库(oracle、mysql、sqlserver。。)的操作。使用jdbc发送sql语句的...
  • wht21888
  • wht21888
  • 2016年08月13日 21:33
  • 1071

JDBC连接数据库的原理和步骤

JDBC是Sun公司制定的一个可以用Java语言连接数据库的技术。 一、JDBC基础知识                 JDBC(Java Data Base Connectivity,...
  • tanyunlong_nice
  • tanyunlong_nice
  • 2014年11月03日 17:15
  • 21779

JDBC第一篇--【介绍JDBC、使用JDBC连接数据库、简单的工具类】

JDBC简单入门1.什么是JDBCJDBC全称为:Java Data Base Connectivity,它是可以执行SQL语句的Java API2.为什么我们要用JDBC 市面上有非常多的数据库,本...
  • hon_3y
  • hon_3y
  • 2016年12月09日 10:35
  • 403

weblogic中JDBC连接数据库的几个问题

BEA公司的中间件weblogic工具提供了一套数据库连接的机制,我采用的是weblogic8.1,数据库是Oracle9i客户端,通过weblogic控制台,我配置了JDBC Connection ...
  • flyfine
  • flyfine
  • 2007年06月05日 18:29
  • 2056

jdbc连接数据库的几个步骤

创建一个JDBC连接数据库程序的几个步骤
  • yujin753
  • yujin753
  • 2014年12月02日 10:58
  • 10920

Java通过JDBC访问数据库(两种方式)

Java通过JDBC访问数据库(两种方式)     利用java语言访问数据库时可以采用JDBC,那么什么是JDBC呢?JDBC(Java Data Base Connectivity,java数据库...
  • wild46cat
  • wild46cat
  • 2016年03月19日 15:26
  • 3229

使用JDBC建立数据库连接的两种方式

使用JDBC建立数据库连接的两种方式: 1.在代码中使用DriverManager获得数据库连接。这种方式效率低,并且其性能、可靠性和稳定性随着用户访问量得增加逐渐下降。 2.使用配置数据源的方式...
  • zhao_liwei
  • zhao_liwei
  • 2016年12月29日 10:19
  • 1227

Java JDBC | 四种连接数据库的方法

四种连接数据库的方法(DriverManager、DataSource子类、DBCP、c3p0)    一、环境     1、数据库驱动jar文件        2、DBCP方法         ...
  • u013045987
  • u013045987
  • 2016年04月27日 19:55
  • 8303

JDBC连接数据库(查询)的步骤

简单的应用例子   先导入jar包 代码:   import java.sql.Connection; import java.sql.DriverManager; import java.sql...
  • Javatwx
  • Javatwx
  • 2016年03月04日 23:52
  • 2571

JDBC连接数据库的七个步骤

Java开发中JDBC连接数据库代码和步骤
  • qq_35596210
  • qq_35596210
  • 2017年03月22日 22:02
  • 732
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JDBC是如何连接数据库的?
举报原因:
原因补充:

(最多只允许输入30个字)