dbcp连接池问题java.lang.AbstractMethodError: com.mysql.jdbc.Connection.isValid(I)Z

李亚威 2014-07-13 02:13:35
java.lang.AbstractMethodError: com.mysql.jdbc.Connection.isValid(I)Z
at org.apache.commons.dbcp2.DelegatingConnection.isValid(DelegatingConnection.java:914)
at org.apache.commons.dbcp2.PoolableConnection.validate(PoolableConnection.java:227)
at org.apache.commons.dbcp2.PoolableConnectionFactory.validateConnection(PoolableConnectionFactory.java:303)
at org.apache.commons.dbcp2.BasicDataSource.validateConnectionFactory(BasicDataSource.java:2165)
at org.apache.commons.dbcp2.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:2148)
at org.apache.commons.dbcp2.BasicDataSource.createDataSource(BasicDataSource.java:1903)
at org.apache.commons.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:1413)
at com.tsc.util.JDBCTools.getConnection(JDBCTools.java:65)
at test.TestJDBCTools.testJDBCTools(TestJDBCTools.java:13)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)







private static final String configFile = "dbcp.properties";
private static DataSource dataSource;


static {
Properties prop = new Properties();
try {
prop.load(JDBCTools.class.getClassLoader()
.getResourceAsStream(configFile));
dataSource = BasicDataSourceFactory.createDataSource(prop);
} catch (Exception e) {
e.printStackTrace();
log.error("数据库连接池初始化失败" + e.getMessage());
}
}

public JDBCTools() {
}

/**
* 设置事务提交
* @param connection
*/
public static void commit(Connection connection){
if(connection != null){
try {
connection.commit();
} catch (SQLException e) {
log.error("设置事务提交异常" + e.getMessage());
}
}
}

/**
* 使用dbcp数据库连接池获取数据库连接
*
* @return Connection
*/
public static final Connection getConnection() {
Connection conn = null;
try {
conn = dataSource.getConnection();
} catch (SQLException e) {
e.printStackTrace();
log.error("获取数据库连接失败" + e.getMessage());
}
return conn;
}
...全文
3725 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
解决方案: mysql-connector 版本为 5.0.4 ,那么对应的 dbcp 和 pool 版本应该为 1.4 和 1.6 。 5.0.4 不应该使用 2.0 及以上版本的 dbcp 和 pool。因为 在 dbcp 中 org.apache.commons.dbcp2.DelegatingConnection 有如下代码: try { return _conn.isValid(timeout); } catch (SQLException e) { handleException(e); return false; } 上述代码中 isVaild 在 com.mysql.jdbc.Connection (5.0.4 ) 中并未实现上述方法,因此将会抛出抽象方法错误。 如果需要使用 dbcp 2.0 ,那么 mysql-connector 必须使用 5.1.3 版本。
门那粒沙 2015-06-04
  • 打赏
  • 举报
回复
引用 6 楼 newbeginners 的回复:
引用 4 楼 qsky001 的回复:
怎么解决的,我也碰到同样的问题
怎么下载的是msi的安装包,没有jar包啊?
解决了没,我也出现这个问题
newbeginners 2015-05-21
  • 打赏
  • 举报
回复
引用 4 楼 qsky001 的回复:
怎么解决的,我也碰到同样的问题
怎么下载的是msi的安装包,没有jar包啊?
baidu_27567783 2015-04-20
  • 打赏
  • 举报
回复
下载最新版本的数据库驱动程序就可以了我试过了,主要是因为tomcat版本过高所以需要新的驱动
qsky2012 2014-07-17
  • 打赏
  • 举报
回复
怎么解决的,我也碰到同样的问题
姜小白- 2014-07-13
  • 打赏
  • 举报
回复
我擦 这么快就结贴了
姜小白- 2014-07-13
  • 打赏
  • 举报
回复
检查你的dataSource 是否获取到了?如果没有检查配置文件吧。
李亚威 2014-07-13
  • 打赏
  • 举报
回复
执行到 conn=dataSource.getConnection()抛了异常 但是catch里边的没有执行

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧