關於java.lang.ClassNotFoundException: org.git.mm.mysql.Driver的解決辦法


用jdbc鏈接數據庫MySql時出現如下異常:

java.lang.ClassNotFoundException: org.git.mm.mysql.Driver
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at com.panguso.test.ps.PSTestStandardizedProducts.DataBaseOperation.getDBConnection(DataBaseOperation.java:84)
at com.panguso.test.ps.PSTestStandardizedProducts.DataBaseOperation.getValuefromDB(DataBaseOperation.java:113)
at com.panguso.test.ps.PSTestStandardizedProducts.DataBaseOperation.main(DataBaseOperation.java:157)

 

原因是在數據庫驅動程序org.gjt.mm.mysql.Driver類中沒有源代碼,打開后可發現內容為:

//Compiled from Driver.java (version 1.5 : 49.0, super bit)
public class org.gjt.mm.mysql.Driver extends com.mysql.jdbc.Driver {

// Method descriptor #5 ()V
// Stack: 1, Locals: 1
public Driver() throws java.sql.SQLException;
0 aload_0 [this]
1 invokespecial com.mysql.jdbc.Driver() [1]
4 return
Line numbers:
[pc: 0, line: 46]
[pc: 4, line: 47]
Local variable table:
[pc: 0, pc: 5] local: this index: 0 type: org.gjt.mm.mysql.Driver
}

 

"org.gjt.mm.mysql.Driver 是當時最好的MySQL JDBC,但不是MySQL公司的,然后MySQL將MM的JDBC驅動收為官方的JDBC驅動,所以將驅動的package也該了,但還保留了org.gjt.mm.mysql.Driver這個路徑的引用,也就是你使用新版的JDBC驅動時還可以通過這個來引用,你打開下載的新版JDBC驅動的jar文件可以看到,只有一個文件的目錄是org.gjt.mm.mysql,就是為了兼容而設計的.  org.git.mm.mysql.Driver 只是簡單的繼承了 com.mysql.jdbc.driver,並沒有實現其他邏輯

解決辦法如下:

1  用mysql自己的的驅動程序 將org.gjt.mm.mysql.Driver換成com.mysql.jdbc.driver即可。

2 將代碼中try catch 去掉,就不會再報異常,程序可以正常運行。至於安全性我也不清楚,原則上沒有,還是建議用1中方法。

try {
Class.forName(DBDriver);
} catch (ClassNotFoundException e) {
//e.printStackTrace();
}

 

 


免責聲明!

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



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