其实Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 返回一个类(Class)
可以写成这样:Class a = Class.forName("class name");“A call to forName("X") causes the class named X to be initialized. ”

解决方案 »

  1.   

    其实,我是想知道,DriverManager 是怎么找到那个驱动的, Class.forName 时并没有显式的把 driver 这个 object 拿到,但 DriverManager 可以找到。 我想做一个类似的东东,我就是不知道,drivermanager 怎么实现
      

  2.   

    根据JDBC的规范sun.jdbc.odbc.JdbcOdbcDriver这个类会存在一个静态的初始化方法
    就是static 段啦,如:
    public class JdbcOdbcDriver {
      static {
      DriverManager.registerDriver(sun.jdbc.odbc.JdbcOdbcDriver.class);//这个只是举例
      }
      //其他方法
     ...
      //
    }
      

  3.   

    Class c = Class.forName("your class");
    Object o = c.newInstance();
    Class.forName()是动态加载,可以让你的程序在运行期确定要使用的类。
    至于DriverManager的实现你可以看一下j2se的源码,JAVA_HOME/src.zip里面就有!
    研究后一定要post出来,期待哦:)
      

  4.   

    通过Class.forName之后,ClassLoader就会执行上述的static代码,那么就成功注册了
    registerDriver了,所以DriverManager就知道以后怎么找这个类
      

  5.   

    多谢ChDw(米) ,我好像明白一些了,我试试  :)
      

  6.   

    我想再问一下,我要用多个 driver ,对于多个进程,driverManager 怎么知道这个 driver 是这个进程的,那个 driver 是那个进程的? 原码太多了,头都大了  :)
      

  7.   

    -------------------我看了 jdk 下的 jdbc 源码,但是 好多(比如connection,resultset)都是 interface,我也找不到实现的代码,请问各位打侠,这是怎么回事啊--------------------
      

  8.   

    Class.forName实际上是根据你给的字符串形式的类名,将其加载到java的虚拟机中
    用CLASSLOADER加载也是同样的效果。
    如果开启了JIT 那么将会把这个类编译成NATIVE CODE
      

  9.   

    DriverManager.getConnect的时候
    DriverManager会将已经注册过的类逐个询问,
    而每个Driver都会回答传入的url是否对于自己合法,合法的话DriverManager就会要求
    这个Driver进行连接操作,并返回Connection对象JDBC是一个规范,并没有任何实现代码,真正的实现代码是依赖于数据库厂商的。
    譬如一个Driver     MyDriver.connnect的方法它会返回一个对象,这个对象实现了
    Connection的接口,所以DriverManager可以将MyDriver.connnect返回的对象类型
    转为Connection并且返回
    在你的代码里面你会写Connection conn = DriverManager.getConnection(url);
    实际上这个conn永远都不会单单是Connection,实际上它是一个对象,只是因为它
    实现了Connection这个接口,所以才能够进行这样的赋值
      

  10.   

    to ChDw(米) ,也就是我可以引入 java.sql.* ,完成我自己的驱动成学是吗?就是把我自己的代码写进去?
    driverManager 会根据不同的 driver 生成不同的 connect 是吗?哦,我明白了。