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

Mik*_*ike 6 java oracle jdbc

我已经读过 为什么在尝试在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();
}  
Run Code Online (Sandbox Code Playgroud)

错误消息:

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)
Run Code Online (Sandbox Code Playgroud)

Kla*_*äck 11

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

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

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

  • 谢谢,谢谢,谢谢,谢谢,谢谢,谢谢,谢谢,谢谢,谢谢,谢谢,谢谢,谢谢,谢谢,谢谢抱歉,你现在只有+1,我心情+100 :) (2认同)

isa*_*pir 5

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

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