Estoy intentando insertar imágenes en una base de datos SQLite. Para hacerlo tengo esto:
Código:
Bueno pues da este error:FileInputStream entrada = null; try { Class.forName("org.sqlite.JDBC"); Connection conn = DriverManager.getConnection("jdbc:sqlite:imagenes.sqlite"); PreparedStatement pst = conn.prepareStatement("INSERT INTO fotos VALUES (1,'wallpaper-1656479.jpg',?)"); conn.setAutoCommit(false); File fila_1 = new File("/home/Andre/Descargas/wallpaper-1656479.jpg"); entrada = new FileInputStream(fila_1); pst.setBinaryStream(1, entrada, (int) fila_1.length()); pst.executeUpdate(); conn.commit(); } catch (FileNotFoundException ex) { ex.printStackTrace(); } catch (SQLException ex) { ex.printStackTrace(); } catch (ClassNotFoundException ex) { ex.printStackTrace(); } finally { try { entrada.close(); } catch (IOException ex) { ex.printStackTrace(); } } } }
java.sql.SQLException: not implemented by SQLite JDBC driver
at org.sqlite.Unused.unused(Unused.java:29)
at org.sqlite.Unused.setBinaryStream(Unused.java:60)
at sqlitefotos.SQLiteFotos.main(SQLiteFotos.java:34) -->pst.setBinaryStream(1, entrada, (int) fila_1.length());
Para la tabla tengo:
Código:
Como este código está sacado de un ejemplo con MySQL he hecho esto mismo para MySQL:CREATE TABLE fotos ( ...> id_foto int not null primary key, ...> nombre varchar(30), ...> imagen blob not null);
Código:
La salida que proporciona es:FileInputStream entrada = null; try { Class.forName("org.gjt.mm.mysql.Driver"); Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/fotos", "root", "contraseña"); PreparedStatement pst = conn.prepareStatement("INSERT INTO tabla_1 VALUES (1,'wallpaper-1656479.jpg',?)"); conn.setAutoCommit(false); File fila_1 = new File("/home/Andre/Descargas/wallpaper-1656479.jpg"); entrada = new FileInputStream(fila_1); pst.setBinaryStream(1, entrada, (int) fila_1.length()); pst.executeUpdate(); conn.commit(); } catch (FileNotFoundException ex) { ex.printStackTrace(); } catch (SQLException ex) { ex.printStackTrace(); } catch (ClassNotFoundException ex) { ex.printStackTrace(); } finally { try { entrada.close(); } catch (IOException ex) { ex.printStackTrace(); } }
com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'imagen' at row 1
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.ja va:2983)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:16 31)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java :1723)
at com.mysql.jdbc.Connection.execSQL(Connection.java: 3283)
at com.mysql.jdbc.PreparedStatement.executeInternal(P reparedStatement.java:1332)
at com.mysql.jdbc.PreparedStatement.executeUpdate(Pre paredStatement.java:1604)
at com.mysql.jdbc.PreparedStatement.executeUpdate(Pre paredStatement.java:1519)
at com.mysql.jdbc.PreparedStatement.executeUpdate(Pre paredStatement.java:1504)
at mysqlfotos.MySQLFotos.main(MySQLFotos.java:33) --> pst.executeUpdate();
Para la tabla tengo:
Código:
Como soy bastante novato con las bases de datos y tampoco tengo un gran nivel en Java, pues no tengo ni idea de lo que está fallando.create table tabla_1 ( -> id_foto int not null, -> nombre varchar(30), -> imagen blob not null);
Puede darme alguien una mínima orientación de como puedo meter las imágenes en la base de datos. Decir que la fórmula que más me interesa en la de SQLite pero si alguien tiene idea de hacerlo de cualquier otra forma pues es bienvenida.
Gracias.