【问题标题】:Springboot+JPA(Hibernate)+Oracle AbstractMethodError not define or inherit an implementation of isValid(int)Springboot+JPA(Hibernate)+Oracle AbstractMethodError 未定义或继承 isValid(int) 的实现
【发布时间】:2020-04-02 13:00:30
【问题描述】:
  • JavaJDK 1.13
  • Springboot 2.2.6
  • Spring 数据 JPA
  • Oracle 10g

我是使用Spring boot的初学者,当我尝试运行demo程序时,它报告异常如下:
Caused by: java.lang.AbstractMethodError: Receiver class oracle.jdbc.driver.T4CConnection does not define or inherit an implementation of the resolved method 'abstract boolean isValid(int)' of interface java.sql.Connection.

我在网上尝试了很多解决方案(比如将驱动程序升级到 ojdbc7 或更高版本,而我一直在 一开始就用ojdbc8,甚至尝试从Oracle 19c的网站下载ojdbc8和ojdbc10,但没有人成功。

根据@JensSchauder 的建议,我查看了oracle.jdbc.driver.T4CConnection 类,发现确实没有这种方法称为boolean isValid(int),而是boolean isValidLight(int)

这里是截图:
ScreenShoot Here, boolean isValidLight(int var1)

这里列出我尝试过的 ojdbcs:

  • ojdbc8:12.2.0.1
  • ojdbc7:12.1.0.2
  • ojdbc8:19.3.0.0(使用中)
  • ojdbc10:19.3.0.0

我应该如何解决这个问题?也许放弃甲骨文?

感谢您的所有提示。

【问题讨论】:

  • 试试 com.oracle.ojdbcojdbc819.3.0.0版本> 依赖>
  • @SimonMartinelli 是的,我之前尝试过从 19c(19.3.0.0) 下载的 ojdbc 驱动程序,但还是一样。我应该从 .m2 目录中删除其他 ojdbc 驱动程序吗?
  • 该错误表明您的类路径中有 ojdbc14(或者如果存在,则可能是 ojdbc5)。
  • @MarkRotteveel 是的,你是对的。我在%JavaHome%\lib 下找到了它们(ojdbc14)。它们似乎来自oracle10g。我会尝试重命名它们,看看它是否会引起任何问题。非常感谢。

标签: java spring oracle spring-boot jdbc


【解决方案1】:

这里确实有些可疑。 Hikari 正在寻找的方法是在 Java 1.6 中引入的,所以它肯定应该在 ojdbc8 那里。

我会尝试以下方法以更好地了解发生了什么。

  1. 检查依赖项是否确实正确下载。
  2. 在IDE中找到Connection类,检查它是否有isValid方法。 我强烈怀疑它有。
  3. 在 Hikari 引发异常的行中添加一个断点并检查它正在检查的对象类型。

这可能已经提供了足够的提示来调试它,如果没有,请使用您找到的信息更新您的问题。

【讨论】:

  • 我以为我找到了问题所在。我找到了班级oracle.jdbc.driver.T4CConnection,发现它确实没有boolean isValid(int),而是boolean isValidLight(int)。我应该如何解决这个问题?
  • 您是否也在该视图中看到了继承的方法?那么T4Connection 没有实现Connection?还是它实现了一个真正旧版本的Connection 而没有isValid?它也来自它应该来自的jar文件吗?
  • 问题已解决。这是由于我的类路径下有 ojdbc14.jar 而我忘了检查它。但无论如何,非常感谢您的回答,很抱歉占用您的时间。
猜你喜欢
  • 2020-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多