关于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();

}