J'essaie d'insérer une image dans une base de données, mais obtenir ce qui suit:Java - Stockage image en tant que Blob dans JavaDB
java.sql.SQLDataException: Une tentative a été faite pour obtenir une valeur de données de type 'BLOB' à partir d'une valeur de données de type 'java.io.InputStream (ASCII)'.
J'utilise blob dans la base de données.
Voici comment je fais l'insertion:
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);
}
}
}
Par ailleurs, sur le stockage du chemin de l'image que, le problème est que je veux que les utilisateurs soient en mesure de me faire parvenir des images et des magasins les dans un fichier, et je ne sais pas exactement comment résoudre le problème d'avoir plusieurs images avec le même nom, renommez-vous être une bonne solution simple?
Assurez-vous que l'index 5 fait référence au bon paramètre. Ils sont 1 indexés! De plus, 'available()' renvoie seulement une estimation! – jn1kk
Je suis sûr que l'index –
"sera renommé être une solution bonne et simple?" Vous devriez stocker les images avec votre propre schéma de nommage, et stocker dans le DB le "nom d'origine" avec le pointeur vers le fichier. – leonbloy