2009-03-08 6 views
5

Ich versuche, ein Bild zu einem BLOB-Feld in einer MySQL-Datenbank hinzuzufügen. Das Bild wird weniger als 100 KB groß sein. Allerdings habe ich Probleme und fragte mich, was wäre eine bessere Möglichkeit, diese Daten in die Datenbank aufzunehmen?Hinzufügen von Bild zu einer Datenbank in Java

com.mysql.jdbc.MysqlDataTruncation: Datenabschneide: Daten zu lang für Spalte ‚Daten‘ in Zeile 1

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

Unten sind die Methode, die ich das Bild in die Datenbank hinzufügen verwenden.

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

Nach dem Datenfeld Typ in einen MEDIUMBLOB ändern und versuchen, eine 140kb Bilddatei in die Datenbank zu platzieren i einen anderen Fehler empfangen.

com.mysql.jdbc.PacketTooBigException: Paket für die Suche ist zu groß

Ist das Problem der Art und Weise, in der ich die Daten in die Datenbank hinzufügen versuchen. Soll ich einen anderen Ansatz wählen? Wenn ja, in welcher Richtung?

+0

Es kann sich lohnen, die Definition der Tabelle zu veröffentlichen, der Sie das Bild hinzufügen möchten. –

Antwort

1

Try setBlob statt setBytes

6

Versuchen Sie, eine MEDIUMBLOB anstelle eines BLOB verwenden. BLOB ist auf 64 KB begrenzt, während eine Spalte MEDIUMBLOB 16 MB enthalten kann.

Siehe den Abschnitt "Speicheranforderungen für String-Typen" unter this page.

0

Führen Sie einfach unten Abfrage zu Beginn des Projekts ...

SET GLOBAL max_allowed_packet = 1024*1024*number of MB 

heißt

SET GLOBAL max_allowed_packet = 1024*1024*14 

Lesen Sie auch this.

Verwandte Themen