Java文件上传到MySQL

标签 java mysql jdbc blob r.java-file

<分区>

我在从 JFileChooser 的选择中获取 java.io.File 以上传所述 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 方法是该类的静态方法,它返回一个默认为 MySQL 数据库的 DriverManager 的新实例。另一件事,我使用的是 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

我该如何解决这个问题?

最佳答案

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

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

关于Java文件上传到MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13789797/

相关文章:

java - 我的 Java 程序 20-30 分钟后 CPU 使用率达到 80%

java - 变量语法错误

java - 如何在maven项目中添加jnetpcap作为依赖项?

java - 为什么 Spring 项目导出的可运行 JAR 不能在另一个系统中工作?

mysql - 带有关系表的条件 SELECT SQL

mysql - 如何使用 JOIN 对表进行排序?

mysql - 如何获得所有客户的前3个订单?

java - 循环遍历结果集以按组生成平均值

sql-server - jTDS 连接字符串 : connect to a MS SQL Server instance with a backslash

java - 从多个线程读取相同的 ResultSet