5

我有这个问题,java.io.File从选择一个JFileChooser将所述java.io.File对象上传到具有此表结构的 MySQL 表

     COL_NAME  COL_TYPE     ATTRIBUTES        EXTRA
(PK) idSample  int(10)      UNSIGNED ZEROFILL AUTO_INCREMENT
     FileName  varchar(250)
     FileBin   blob         BINARY 

并且从这个 Java 代码中,该newConnection方法是类的静态方法,其中它将 DriverManager 默认的新实例返回到所述 MySQL 数据库。另一件事,我使用的是java.sql包而不是com.mysql.jdbc包。

public static boolean insert(final String filename, File file) throws SQLException, IOException {
    boolean flag = false;
    try {
        Connection connection = newConnection();
        PreparedStatement statement = connection.prepareStatement(SQL_INSERT);
        statement.setString(1, filename);
        statement.setBlob(2, new FileInputStream(file), file.length());
        flag = statement.executeUpdate() > 0;
        statement.close();
        connection.close();
    } catch (SQLException ex) {
        throw ex;
    } catch (IOException ex) {
        throw ex;
    }
    return flag;
}

当我尝试运行该程序时,它返回一个错误,导致statement.setBlob具有此堆栈跟踪的行:

Exception in thread "main" java.lang.AbstractMethodError: com.mysql.jdbc.PreparedStatement.setBlob(ILjava/io/InputStream;J)V

我该如何解决这个问题?

4

1 回答 1

2

AbstractMethodError意味着您的 JDBC 驱动程序PreparedStatement没有实现setBlob(int, InputStream, long).

使用较旧setBlob(int, Blob)的驱动程序或更新您的驱动程序(Connector/J 5.1 实现了 Jdbc 4.0,这应该是您需要的setBlob(int, InputStream, long)

于 2012-12-09T19:01:58.497 回答