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
我怎样才能解决这个问题呢?
您是否尝试过使用的setBinaryStream代替的setBlob? http://docs.oracle.com/javase/6/docs/api/java/sql/PreparedStatement.html#setBinaryStream(int,java.io.InputStream) –
仍然返回相同的异常。 –
例外情况是告诉你最后一个参数是长(J)。尝试将file.length转换为int:....,(int)file.length()); –