5

上記のオブジェクトをこのテーブル構造を持つMySQLテーブルにアップロードするためにjava.io.File、の選択から取得するというこの問題がありますJFileChooserjava.io.File

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

そして、この Java コードから、newConnectionメソッドはクラスの静的メソッドであり、前述の MySQL データベースにデフォルトで DriverManager の新しいインスタンスを返します。もう1つ、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 に答える