赞
踩
今天在使用数据库连接池(C3P0)连接数据库时,总是连接不上数据库,并且会报以下错误:
Exception in thread "main" java.lang.NoClassDefFoundError: com/mchange/v2/ser/Indirector at com.zed.test.DataSourceTest.main(DataSourceTest.java:13) Caused by: java.lang.ClassNotFoundException: com.mchange.v2.ser.Indirector at java.net.URLClassLoader.findClass(URLClassLoader.java:382) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 1 more
报错的代码如下:
package com.zed.test; import com.mchange.v2.c3p0.ComboPooledDataSource; import java.beans.PropertyVetoException; import java.sql.Connection; import java.sql.SQLException; public class DataSourceTest { public static void main(String[] args) { try{ //创建C3P0(数据库连接池) ComboPooledDataSource dataSource = new ComboPooledDataSource(); System.out.println("创建连接池成功1"); //加载驱动 dataSource.setDriverClass("com.mysql.cj.jdbc.Driver"); //设置链接(注意设置编码) dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/demodb?useUnicode=true&characterEncoding=UTF-8"); //设置用户名 dataSource.setUser("root"); //设置密码 dataSource.setPassword("123456"); //获取连接对象 Connection connection = dataSource.getConnection(); System.out.println(connection); }catch (PropertyVetoException e){ e.printStackTrace(); }catch (SQLException e){ e.printStackTrace(); } } }
上述代码的意思很简单,流程如下:
我也提前在项目中导入了用于连接数据库(mysql 8.0.20)的对应版本jar包:mysql-connector-java-8.0.20,以及用于完成对 java 官方提供的数据库连接池的第三方 jar 包(截至2020-2-27的最新版本):c3p0-0.9.5.5.jar。如下:
但是点击运行,程序却报上面的错,如下:
这个问题让我百思不得其解,因为以前都没出现这问题呀。
后来在网上查阅大量的资料,发现在 c3p0-0.9.2 版本后,需再导入数据库连接池的辅助包 mchange-commons-java-xxx.jar 才能正常地使用。而我在项目中用的是最新的 c3p0-0.9.5.5.jar 包,因此必须导入对应的辅助包才能使用。
于是现在的问题是,什么版本的 mchange-commons-java-xxx.jar 包才能和这个最新版本匹配的 c3p0-0.9.2.jar 呢?通常我们认为,软件都是向下兼容的,反正你找发行时间大于等于 c3p0-0.9.5.5 这个版本的(2019年12月)就可以了。于是我就找到了同是当前最新的(2020年1月)发行版: mchange-commons-java-0.2.20.jar。
接下来,当我们将 mchange-commons-java-0.2.20.jar 这个包再导入项目中,如下:
然后再次运行程序,便得到了如下正确输出:
程序输出了正确的日志,并打印了得到的连接对象信息。
下面,我将上述用到的3个 jar 包(截至2020-5-27最新,数据库是mysql 8.0.20)全部打包进压缩包 c3p0-all(version-2020-5-27) 中,供需要的同志们下载使用:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。