2012-12-09 41 views
6

我有这个问题从JFileChooser的选择得到一个java.io.File与所述java.io.File对象上传到MySQL为表此表结构Java文件上传到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 

我怎样才能解决这个问题呢?

+0

您是否尝试过使用的setBinaryStream代替的setBlob? http://docs.oracle.com/javase/6/docs/api/java/sql/PreparedStatement.html#setBinaryStream(int,java.io.InputStream) –

+0

仍然返回相同的异常。 –

+0

例外情况是告诉你最后一个参数是长(J)。尝试将file.length转换为int:....,(int)file.length()); –

回答

2

AbstractMethodError表示您的JDBC驱动程序的PreparedStatement s不执行setBlob(int, InputStream, long)

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