2009-03-08 75 views
5

Tôi đang cố gắng thêm hình ảnh vào trường BLOB trong cơ sở dữ liệu mysql. Hình ảnh sẽ nhỏ hơn 100kb. Tuy nhiên tôi đang chạy vào vấn đề và đã tự hỏi những gì sẽ là một cách tốt hơn để thêm dữ liệu này vào cơ sở dữ liệu?Thêm hình ảnh vào cơ sở dữ liệu trong Java

com.mysql.jdbc.MysqlDataTruncation: Dữ liệu cắt ngắn: Dữ liệu quá dài cho cột 'dữ liệu' tại hàng 1

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

Dưới đây là phương pháp mà tôi đang sử dụng để thêm hình ảnh vào cơ sở dữ liệu.

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

Sau Thay đổi kiểu DataField đến một Mediumblob và cố gắng đặt một tập tin ảnh 140kb vào cơ sở dữ liệu tôi nhận được một lỗi khác nhau.

com.mysql.jdbc.PacketTooBigException: Packet cho truy vấn quá lớn

là vấn đề cách thức mà tôi đang cố gắng để thêm dữ liệu vào cơ sở dữ liệu. Tôi có nên thực hiện một cách tiếp cận khác không? Nếu như vậy theo cách nào?

+0

Có thể đáng để đăng định nghĩa của bảng bạn đang cố thêm hình ảnh vào. –

Trả lời

1

Hãy thử setBlob thay vì setBytes

6

Hãy thử sử dụng một MEDIUMBLOB thay vì một BLOB. BLOB được giới hạn ở 64KB trong khi cột MEDIUMBLOB có thể giữ 16MB.

Xem phần 'Yêu cầu bộ nhớ cho loại chuỗi' this page.

0

Chỉ cần thực hiện dưới đây truy vấn vào lúc bắt đầu của dự án ...

SET GLOBAL max_allowed_packet = 1024*1024*number of MB 

ví dụ:

SET GLOBAL max_allowed_packet = 1024*1024*14 

Cũng đọc this.

Các vấn đề liên quan