其实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. ”
可以写成这样:Class a = Class.forName("class name");“A call to forName("X") causes the class named X to be initialized. ”
就是static 段啦,如:
public class JdbcOdbcDriver {
static {
DriverManager.registerDriver(sun.jdbc.odbc.JdbcOdbcDriver.class);//这个只是举例
}
//其他方法
...
//
}
Object o = c.newInstance();
Class.forName()是动态加载,可以让你的程序在运行期确定要使用的类。
至于DriverManager的实现你可以看一下j2se的源码,JAVA_HOME/src.zip里面就有!
研究后一定要post出来,期待哦:)
registerDriver了,所以DriverManager就知道以后怎么找这个类
用CLASSLOADER加载也是同样的效果。
如果开启了JIT 那么将会把这个类编译成NATIVE CODE
DriverManager会将已经注册过的类逐个询问,
而每个Driver都会回答传入的url是否对于自己合法,合法的话DriverManager就会要求
这个Driver进行连接操作,并返回Connection对象JDBC是一个规范,并没有任何实现代码,真正的实现代码是依赖于数据库厂商的。
譬如一个Driver MyDriver.connnect的方法它会返回一个对象,这个对象实现了
Connection的接口,所以DriverManager可以将MyDriver.connnect返回的对象类型
转为Connection并且返回
在你的代码里面你会写Connection conn = DriverManager.getConnection(url);
实际上这个conn永远都不会单单是Connection,实际上它是一个对象,只是因为它
实现了Connection这个接口,所以才能够进行这样的赋值
driverManager 会根据不同的 driver 生成不同的 connect 是吗?哦,我明白了。