java.sql.SQLException: No suitable driver found for jdbc

  前几天在使用一些组件的时候遇到了这个报错:java.sql.SQLException: No suitable driver found for jdbc:XXX,以后上网搜了一个方法解决了,可为何能如此解决则在这里记录一下:html

1、网上搜索的解决方案java

  《No Suitable Driver Found For Jdbc_个人解决方法sql

  文中的解决办法是在jre\lib\ext上添加驱动jar包,问题解决;bootstrap

  可是解释就不是做者所说的须要把jar包放在外部jar包环境中。其根本缘由是:程序没有加载驱动jar包;ui

  当程序没有加载驱动包,就运行DriverManager.getConnection(url,usr,psd),就会报这个错误:url

  No suitable driver found for jdbc:XXXspa

  

  这里缺乏了Class.forName()致使的,当我按照前面的解决办法,把驱动包放在jre\lib\ext上的时候,一样可以解决问题:.net

   

  显然易见:出现No suitable driver found for jdbc这个报错的缘由是程序没有加载驱动程序jar包,尽管在lib上已经包含了这个jar包。htm

2、关于类加载器blog

  网上关于类加载器的资料

  类加载时采用的树形的委托机制,默认有三个类加载器:

  一、Bootstrap Class Loader:加载jre/lib/rt.jar;在树的根节点

  二、Extension Class Loader:加载jre/lib/ext/*.jar

  三、System Class Loader:加载classpath指定的jar或者目录;

  他们的加载顺序是:先bootstrap加载,而后extension加载,最后system加载。

  加载策略:向上委托策略,低级别类加载器(L)的要加载类,先由最高级别的类加载器先加载,若加载不成功则层层向下传递,直到该类加载器(L)也加载不了则报错。

  一篇关于JVM类加载机制的文章;

  在本文中,Class.forName()的类加载器就是调用者的类加载器,总之,只要能把驱动jar包加载上去就能够解决问题了,不管在哪里加载这个jar包。

3、参考资料

  一、《No Suitable Driver Found For Jdbc_个人解决方法

  二、《No suitable driver found for jdbc:XXX

  三、《Java 若是将JAR文件放入jre/lib/ext目录中,会遇到什么麻烦?

  四、《JVM类加载机制