Я пытаюсь вставить изображение в базу данных, но получаю следующее:Java - Сохранение изображения в качестве Blob в JavaDB
java.sql.SQLDataException: Была сделана попытка получить значение данных типа «BLOB» из значения данных типа «java.io.InputStream (ASCII)».
Я использую blob в базе данных.
Вот как я делаю вставки:
package javaapplication16;
import com.sun.rowset.CachedRowSetImpl;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.sql.rowset.CachedRowSet;
public class JavaApplication16 {
public static void main(String[] args) throws FileNotFoundException {
try {
String driver = "org.apache.derby.jdbc.EmbeddedDriver";
try {
try {
Class.forName(driver).newInstance();
} catch (InstantiationException ex) {
Logger.getLogger(JavaApplication16.class.getName()).log(Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
Logger.getLogger(JavaApplication16.class.getName()).log(Level.SEVERE, null, ex);
}
} catch (ClassNotFoundException ex) {
Logger.getLogger(JavaApplication16.class.getName()).log(Level.SEVERE, null, ex);
}
CachedRowSet crs = null;
crs = new CachedRowSetImpl();
crs.setUrl("jdbc:derby:derbyDB; create = true");
crs.setUsername("x");
crs.setPassword("x");
crs.setCommand("drop table tbl");
crs.execute();
crs.setCommand("CREATE TABLE tbl (ID blob)");
crs.execute();
File f = new File("/images/exam_gif_to_png.gif");
crs.setCommand("insert into tbl (id) values (?)");
FileInputStream fin = new FileInputStream(f);
crs.setBinaryStream(1, fin, (int) f.length());
crs.execute();
} catch (SQLException ex) {
Logger.getLogger(JavaApplication16.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
Кстати, о хранении путь только изображения, проблема в том, что я хочу, чтобы пользователи могли выслать изображения и магазин их в файле, и я не уверен, как точно решить проблему с несколькими изображениями с тем же именем, переименование будет хорошим и простым решением?
Убедитесь, что индекс 5 относится к правильному параметру. Они 1 проиндексированы! Кроме того, 'available()' возвращает только оценку! – jn1kk
Я уверен в индексе –
«переименование будет хорошим и простым решением?» Вы должны хранить изображения с помощью собственной схемы именования и хранить в БД «Исходное имя» вместе с указателем на файл. – leonbloy