总结加载驱动的两种方法以及高版本不需要手动添加驱动:
1)第一种import驱动类,然后实例化 (实例化的过程进行了类加载)
不导入写全包名即可。
![1a32f25bc64bbd37c4be07b78d1fad81.png](https://i-blog.csdnimg.cn/blog_migrate/e7f660961b124aef6bb65ea10ca1cd49.jpeg)
2)第二种通过class.forName(String 驱动类),进行类加载(实质上加载驱动的)。
3)高版本的Oracle和MySql已经不用手动操作驱动类加载了,因为采用了最新的SPI技术,在DriverManager中的静态块初始化加载驱动。
4)总结:虽然大部分新版本不需要手动添加,但是选择Class.forName()手动加更加安全(应对低版本),第一种不推荐,不灵活,动态。
![0aa7a2642461752e44a985f63be68e6b.png](https://i-blog.csdnimg.cn/blog_migrate/a9d27422db5a22717cb47d6405477188.jpeg)
![2319a04334dd18e0001dc4f1ac2a67a5.png](https://i-blog.csdnimg.cn/blog_migrate/d93dfefd62cbea68c0d51dde73962e28.jpeg)
![a7b8c826041c016b8cc8c630f9236bad.png](https://i-blog.csdnimg.cn/blog_migrate/8b411b19f07e50067c208b65074fc3e1.jpeg)
总结Improt和Class.forName()的区别:
1)"import,可以说根本没有什么实质性的动作,只是让程序员少写些代码而已,使不使用import完全是个编码风格问题,编译的结果完全一样。
2)而class.forName()会加载类,这是一个“大动作”!加载类的时候,会初始化一个Class对象(注意不是类的实例),并初始化所有的static成员,执行static0代码块。当你不需要创建任何实例,而需要jvm去做一些事情的时候,使用class.forName)非常有用,这就是为什么数据库的驱动程序都是用这种形式来加载,因为加载驱动程序不需要创建对象实例。”