菜鸟,加载数据库驱动的本质,无法理解
初学者,加载数据库驱动的本质,无法理解
加载SQLServer的驱动是这样写,还可以直接new com.microsoft.sqlserver.jdbc.SQLServerDriver(); 然后后面就可以使用了。
这里我就不理解了,这个驱动是怎样加载的? 直接实例化,但是并没有使用这个对象呀!驱动加载到哪儿了?
并且我试着把加载驱动的代码去掉,依然可以连接数据库读取数据没有错误,这个驱动的生存期是怎样的?
可能是基础知识不了解,麻烦解释解释。。
------解决思路----------------------
驱动是通过静态块来加载的,比如说有这么一个类
1.A如何能被打印呢?要么Class.forName("A"),要么new A(),但是这里的A对象并没有什么实际作用,所以推荐使用前者
2.Jdbc规定所有driver,包括sqlServerDriver,mySqlDriver,oracleDriver等都有这么个静态块来初始化DriverManager
做的事简单说就是DriverManager.register(new ADriver()),因为sqlServerDriver等类是由各个数据库厂商写的,DriverManager是原来的Sun写的,用于连接Driver,Sun不知道市面上有哪些Driver,需要你主动告诉它你是谁。
最早版本这是必须的,但是现在的版本由于这些数据库都是已经是常用的了,所以DriverManager内置知道去那里找,但是如果你自己写一个数据库的话或者用那些没有名气的数据库时这个就是必须的。
------解决思路----------------------
这种做法在以前是必须的,JDBC3.0之后能自动发现驱动
通过jdbc连接数据库,需要驱动,这是毫无疑问的
并且不同的库需要不同的驱动,那么问题来了,怎样选择具体使用那个驱动呢?
答案是更具jdbc连接数据的URL来决定
首先要向系统注册各种各样的驱动,当然这个可以根据需要来,如果确定只有一个数据库类型,那么注册一个就行了
以前是手工注册,现在是自动注册。
每次从DriverManager中获取连接时,会将url依次交由已注册的驱动列表中的驱动来检测,是否接受这个格式的url,直到第一个接受的驱动为止,如果所有的驱动都询问完毕后,依然没有愿意接受的,那么就爆no suiteable driver这样的异常
所谓的加载,其实就是利用类加载的过程中会执行static代码块的原理,将自身注册进DriverManager的过程。
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
} catch (ClassNotFoundException ex) {
System.err.println(ex.getMessage());
}
加载SQLServer的驱动是这样写,还可以直接new com.microsoft.sqlserver.jdbc.SQLServerDriver(); 然后后面就可以使用了。
这里我就不理解了,这个驱动是怎样加载的? 直接实例化,但是并没有使用这个对象呀!驱动加载到哪儿了?
并且我试着把加载驱动的代码去掉,依然可以连接数据库读取数据没有错误,这个驱动的生存期是怎样的?
可能是基础知识不了解,麻烦解释解释。。
------解决思路----------------------
驱动是通过静态块来加载的,比如说有这么一个类
class A{
static{
System.out.println("A");
}
}
1.A如何能被打印呢?要么Class.forName("A"),要么new A(),但是这里的A对象并没有什么实际作用,所以推荐使用前者
2.Jdbc规定所有driver,包括sqlServerDriver,mySqlDriver,oracleDriver等都有这么个静态块来初始化DriverManager
做的事简单说就是DriverManager.register(new ADriver()),因为sqlServerDriver等类是由各个数据库厂商写的,DriverManager是原来的Sun写的,用于连接Driver,Sun不知道市面上有哪些Driver,需要你主动告诉它你是谁。
最早版本这是必须的,但是现在的版本由于这些数据库都是已经是常用的了,所以DriverManager内置知道去那里找,但是如果你自己写一个数据库的话或者用那些没有名气的数据库时这个就是必须的。
------解决思路----------------------
这种做法在以前是必须的,JDBC3.0之后能自动发现驱动
通过jdbc连接数据库,需要驱动,这是毫无疑问的
并且不同的库需要不同的驱动,那么问题来了,怎样选择具体使用那个驱动呢?
答案是更具jdbc连接数据的URL来决定
首先要向系统注册各种各样的驱动,当然这个可以根据需要来,如果确定只有一个数据库类型,那么注册一个就行了
以前是手工注册,现在是自动注册。
每次从DriverManager中获取连接时,会将url依次交由已注册的驱动列表中的驱动来检测,是否接受这个格式的url,直到第一个接受的驱动为止,如果所有的驱动都询问完毕后,依然没有愿意接受的,那么就爆no suiteable driver这样的异常
所谓的加载,其实就是利用类加载的过程中会执行static代码块的原理,将自身注册进DriverManager的过程。