为什么我一直收到“java.lang.AbstractMethodError:oracle.jdbc.driver.OracleConnection”错误? 它让我疯狂。 。

我已经读过为什么在尝试在db中加载blob时会得到java.lang.AbstractMethodError? ,下载了我能找到的所有11g jdbc驱动程序,并将它们作为库和/或jar文件添加到我的NetBeans应用程序中。 我仍然继续得到相同的AbstractMethodError,这让我变得多了! 任何指导将不胜感激!

try { stmt = conn.createStatement(); inputFileInputStream = new FileInputStream(inputBinaryFile); Blob vBlob = conn.createBlob(); BufferedImage vGImage=ImageIO.read(name); int offset =0; OutputStream out = vBlob.setBinaryStream(offset); ImageIO.write(vGImage, "JPG", out); PreparedStatement stat = conn.prepareStatement("INSERT INTO item VALUES (?,?,?,?,?)"); stat.setString(1, itemNo); stat.setString(2, itemName); stat.setBlob(3,vBlob); stat.setString(4, invenType); stat.setDouble(5, vPrice); stat.executeUpdate(); } catch (IOException e) { System.out.println("Caught I/O Exception: (Write BLOB value - Put Method)."); e.printStackTrace(); throw e; } catch (SQLException e) { System.out.println("Caught SQL Exception: (Write BLOB value - Put Method)."); System.out.println("SQL:\n" + sqlText); e.printStackTrace(); throw e; }finally { conn.close(); } 

错误消息:

 Exception in thread "main" java.lang.AbstractMethodError: oracle.jdbc.driver.OracleConnection.createBlob()Ljava/sql/Blob; at DatabaseIO.setOracleDBBlob(DatabaseIO.java:115) at DatabaseIO.main(DatabaseIO.java:26) 

问题的原因是软件不兼容(jar文件)。

createBlob是一种新方法(在java 1.6中引入),因此较旧的驱动程序不太可能实现它。

确保您的类路径仅包含兼容的驱动程序,而不包含任何早期版本的驱动程序。 (谢谢Jochen)

正如其他人所说,这是由于旧的Oracle JDBC驱动程序。

在我的情况下,用ojdbc16.jar (Oracle JDBC驱动程序11.2.0.4.0)替换ojdbc14.jar (Oracle JDBC驱动程序10.1.0.5.0)修复了该问题。