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


  前幾天在使用一些組件的時候遇到了這個報錯:java.sql.SQLException: No suitable driver found for jdbc:XXX,之后上網搜了一個方法解決了,可為什么能如此解決則在這里記錄一下:

一、網上搜索的解決方案

  《No Suitable Driver Found For Jdbc_我的解決方法

  文中的解決辦法是在jre\lib\ext上添加驅動jar包,問題解決;

  但是解釋就不是作者所說的需要把jar包放在外部jar包環境中。其根本原因是:程序沒有加載驅動jar包;

  當程序沒有加載驅動包,就運行DriverManager.getConnection(url,usr,psd),就會報這個錯誤:

  No suitable driver found for jdbc:XXX

  

  這里缺少了Class.forName()導致的,當我按照前面的解決辦法,把驅動包放在jre\lib\ext上的時候,同樣能夠解決問題:

   

  顯然易見:出現No suitable driver found for jdbc這個報錯的原因是程序沒有加載驅動程序jar包,盡管在lib上已經包含了這個jar包。

二、關於類加載器

  網上關於類加載器的資料

  類加載時采用的樹形的委托機制,默認有三個類加載器:

  1、Bootstrap Class Loader:加載jre/lib/rt.jar;在樹的根節點

  2、Extension Class Loader:加載jre/lib/ext/*.jar

  3、System Class Loader:加載classpath指定的jar或者目錄;

  他們的加載順序是:先bootstrap加載,然后extension加載,最后system加載。

  加載策略:向上委托策略,低級別類加載器(L)的要加載類,先由最高級別的類加載器先加載,若加載不成功則層層向下傳遞,直到該類加載器(L)也加載不了則報錯。

  一篇關於JVM類加載機制的文章;

  在本文中,Class.forName()的類加載器就是調用者的類加載器,總之,只要能把驅動jar包加載上去就可以解決問題了,無論在哪里加載這個jar包。

三、參考資料

  1、《No Suitable Driver Found For Jdbc_我的解決方法

  2、《No suitable driver found for jdbc:XXX

  3、《Java 如果將JAR文件放入jre/lib/ext目錄中,會遇到什么麻煩?

  4、《JVM類加載機制


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM