2009-03-08 21 views
5

Estoy tratando de agregar una imagen a un campo BLOB en una base de datos mysql. La imagen va a tener menos de 100 kb de tamaño. Sin embargo, estoy teniendo problemas y me preguntaba ¿cuál sería una mejor forma de agregar estos datos a la base de datos?Agregar imagen a una base de datos en Java

com.mysql.jdbc.MysqlDataTruncation: truncamiento de datos: Los datos demasiado largo para la columna 'Datos' en la fila 1

PreparedStatement addImage = conn.prepareStatement("INSERT INTO Images (Width, Height, Data) VALUES (?,?,?)",Statement.RETURN_GENERATED_KEYS); 

A continuación se muestra el método que estoy usando para agregar la imagen en la base de datos.

public int addImage(Image image) throws SQLException, IllegalArgumentException 
{ 
    this.addImage.clearParameters(); 
    byte[] imageData = ImageConverter.convertToBytes(image); 
    int width = image.getWidth(null); 
    int height = image.getHeight(null); 
    if (width == -1 || height == -1) 
    { 
     throw new IllegalArgumentException("You must load the image first."); 
    } 



    this.addImage.setInt(1, width); 
    this.addImage.setInt(2, height); 
    this.addImage.setBytes(3, imageData); 
    this.addImage.executeUpdate(); 

    ResultSet rs = this.addImage.getGeneratedKeys(); 
    rs.next(); 

    return rs.getInt(1); 
} 

SQL Definition for the table

después de cambiar el tipo de campo de datos a un MEDIUMBLOB y el intento de colocar un archivo de imagen de 140kb en la base de datos que he recibido un error diferente.

com.mysql.jdbc.PacketTooBigException: paquete de la consulta es demasiado grande

es el problema de la forma en que estoy tratando de agregar los datos a la base de datos. ¿Debería tomar un enfoque diferente? Si es así, ¿qué camino?

+0

Puede valer la pena publicar la definición de la tabla a la que intenta agregarle la imagen. –

Respuesta

1

setBlob Try lugar de setBytes

6

Trate de usar un MEDIUMBLOB en lugar de un BLOB. BLOB está limitado a 64 KB, mientras que una columna MEDIUMBLOB puede contener 16 MB.

Consulte la sección 'Requisitos de almacenamiento para tipos de cadenas' en this page.

0

Justo debajo de ejecutar la consulta en el inicio del proyecto ...

SET GLOBAL max_allowed_packet = 1024*1024*number of MB 

decir

SET GLOBAL max_allowed_packet = 1024*1024*14 

Lea también this.

Cuestiones relacionadas