2009-03-08 5 views
5

J'essaie d'ajouter une image à un champ BLOB dans une base de données mysql. L'image va être inférieure à 100kb. Cependant, je rencontre des problèmes et je me demandais quelle serait la meilleure façon d'ajouter ces données à la base de données?Ajout d'une image à une base de données en Java

com.mysql.jdbc.MysqlDataTruncation: troncature données: données trop long pour la colonne « Données » à la ligne 1

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

Voici la méthode que j'utilise pour ajouter l'image dans la base de données.

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

Après modification du type dataField à un MEDIUMBLOB et de tenter de placer un fichier image 140kb dans la base de données que j'ai reçu une autre erreur.

com.mysql.jdbc.PacketTooBigException: paquet pour la requête est trop grand

Est-ce le problème de la façon dont je suis en train d'ajouter les données à la base de données. Devrais-je adopter une approche différente? Si oui, de quelle façon?

+0

Il peut être utile de poster la définition de la table à laquelle vous essayez d'ajouter l'image. –

Répondre

1

Essayez setBLOB au lieu de setBytes

6

Essayez d'utiliser un MEDIUMBLOB au lieu d'un BLOB. BLOB est limitée à 64 Ko alors qu'une colonne MEDIUMBLOB peut contenir 16 Mo.

Voir la section «Exigences de stockage pour les types de chaînes» de this page.

0

juste ci-dessous execute requête au début du projet ...

SET GLOBAL max_allowed_packet = 1024*1024*number of MB 

à savoir

SET GLOBAL max_allowed_packet = 1024*1024*14 

lire également this.

Questions connexes