mam ten problem z dostaniem java.io.File
od wyborze JFileChooser
przesłać wspomnianą java.io.File
obiektu do tabeli MySQL Mając to struktura tabeliJava wysyłania pliku do MySQL
COL_NAME COL_TYPE ATTRIBUTES EXTRA
(PK) idSample int(10) UNSIGNED ZEROFILL AUTO_INCREMENT
FileName varchar(250)
FileBin blob BINARY
iz tego kodu Java, newConnection
Metoda jest statyczną metodą klasy, w której zwraca nową instancję domyślną DriverManager do wspomnianej bazy danych MySQL. Kolejna rzecz, używam pakietu java.sql
, a nie pakietu 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;
}
Kiedy próbowałem uruchomić program, to zwraca błąd prowadzący do linii statement.setBlob
posiadającego tę StackTrace:
Exception in thread "main" java.lang.AbstractMethodError: com.mysql.jdbc.PreparedStatement.setBlob(ILjava/io/InputStream;J)V
Jak mogę rozwiązać ten problem?
Czy próbowałeś za pomocą SetBinaryStream zamiast SetBlob? http://docs.oracle.com/javase/6/docs/api/java/sql/PreparedStatement.html#setBinaryStream(int, java.io.InputStream) –
Nadal zwraca ten sam wyjątek. –
Wyjątkiem jest informowanie, że ostatni parametr to długi (J). Spróbuj przesłać plik. Length do int: ...., (int) file.length()); –