初学者,加载数据库驱动的本质,无法理解 java数据库sqlserver 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 驱动是通过静态块来加载的,比如说有这么一个类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内置知道去那里找,但是如果你自己写一个数据库的话或者用那些没有名气的数据库时这个就是必须的。 可以百度下:JAVA 服务提供者框架介绍 这种做法在以前是必须的,JDBC3.0之后能自动发现驱动通过jdbc连接数据库,需要驱动,这是毫无疑问的并且不同的库需要不同的驱动,那么问题来了,怎样选择具体使用那个驱动呢?答案是更具jdbc连接数据的URL来决定首先要向系统注册各种各样的驱动,当然这个可以根据需要来,如果确定只有一个数据库类型,那么注册一个就行了以前是手工注册,现在是自动注册。每次从DriverManager中获取连接时,会将url依次交由已注册的驱动列表中的驱动来检测,是否接受这个格式的url,直到第一个接受的驱动为止,如果所有的驱动都询问完毕后,依然没有愿意接受的,那么就爆no suiteable driver这样的异常所谓的加载,其实就是利用类加载的过程中会执行static代码块的原理,将自身注册进DriverManager的过程。 也就是说,如果一个不知名的数据库DriverManager内找不到的,就得DriverManger.register() 或者Class.forName() 是吗? 是这样的。不过实际数据库就这么几种,所以理论上不会出现这种情况。你可以这样想,我还是用sqlserver的jar包,但是我修改了jar包,只是把SQLServerDriver改名成,MySqlServerDriver,SQLServerDriver01等,实际上jar包的功能都是一样的,但是jdbc就傻眼了,我不告诉它,它就不可能知道我改成了什么东西。 是这样的。不过实际数据库就这么几种,所以理论上不会出现这种情况。你可以这样想,我还是用sqlserver的jar包,但是我修改了jar包,只是把SQLServerDriver改名成,MySqlServerDriver,SQLServerDriver01等,实际上jar包的功能都是一样的,但是jdbc就傻眼了,我不告诉它,它就不可能知道我改成了什么东西。谢谢 新手!!苦恼(求指教 不胜感激) 很简单的OO问题,请提供下思路。 征集令:现征收几个正则表达式,高手进(特别是火龙果) 判断存到BufferReader里的email地址 如何表示一个不可输入的asc字符 这样的字符串怎么处理呢?:) 这是我考试的一道附加题,我初学,不会,谁能帮我 紧急问题!JAVA高手帮顶啊!跪谢! 我不知道Iterator的第一个无素怎么访问 子类与超类中方法的置换问题 当你遇到这类错误的时候该怎么办? 有关JSP取struts2内容的问题
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内置知道去那里找,但是如果你自己写一个数据库的话或者用那些没有名气的数据库时这个就是必须的。
并且不同的库需要不同的驱动,那么问题来了,怎样选择具体使用那个驱动呢?答案是更具jdbc连接数据的URL来决定
首先要向系统注册各种各样的驱动,当然这个可以根据需要来,如果确定只有一个数据库类型,那么注册一个就行了
以前是手工注册,现在是自动注册。
每次从DriverManager中获取连接时,会将url依次交由已注册的驱动列表中的驱动来检测,是否接受这个格式的url,直到第一个接受的驱动为止,如果所有的驱动都询问完毕后,依然没有愿意接受的,那么就爆no suiteable driver这样的异常所谓的加载,其实就是利用类加载的过程中会执行static代码块的原理,将自身注册进DriverManager的过程。
谢谢