在转载上一篇博文中,我发现将数据库放在jre的ext目录中可以解决这个异常。
但是这样并不能消除我的疑问,为什么要把驱动包放在那里才能正常运行呢?阅读了论坛的很多帖子我发现凡是关于这个问题的帖子必有关于jvm类加载机制的说法。但对于这种很抽象的东西确实说出来令人感到费解。但是所幸的是,问题是解决了,大家也不必纠结原理了。
对于项目的异常问题我做了很多的实验:
比如:
使用c3p0连接池,未发现异常
使用纯jdbc未发现异常
使用dbcp1.4,在tomcat环境下,发现No suitable driver异常。(将驱动包放在jre目录中,异常消失。使用java application运行无异常)。
通过以上测试我想起了以前学到的知识,不管驱动包是否是老版本还是旧版本,我们最好使用Class.forName("com.mysql.jdbc.Driver");来手动加载驱动类。
在加上这句代码后,再次测试,异常消失。
所以得出以下结论:
dbcp1.4存在以下缺陷,在web工程中需要手动加载驱动类。也就是在获得数据库连接的前面的代码中最好加上一句Class.forName("com.mysql.jdbc.Driver")。