在Java中向数据库添加图像

5
我正在尝试将一张图片添加到MySQL数据库的BLOB字段中。这张图片的大小将小于100kb。但是,我遇到了问题,想知道有什么更好的方法将这些数据添加到数据库中?
com.mysql.jdbc.MysqlDataTruncation: 数据截断:在第1行,“Data”列的数据太长。
PreparedStatement addImage = conn.prepareStatement("INSERT INTO Images (Width, Height, Data) VALUES (?,?,?)",Statement.RETURN_GENERATED_KEYS);

以下是我正在使用的将图像添加到数据库中的方法。
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定义

将数据字段类型更改为Mediumblob后,尝试将一个大小为140kb的图像文件放入数据库时,我收到了不同的错误。

com.mysql.jdbc.PacketTooBigException:查询数据包太大

问题出在我尝试向数据库添加数据的方式上吗?我应该采取不同的方法吗?如果是,应该用哪种方法呢?


1
可能值得发布您尝试添加图像的表的定义。 - David Webb
4个回答

6
尝试使用MEDIUMBLOB代替BLOBBLOB仅限于64KB,而MEDIUMBLOB列可以容纳16MB。
请参见此页面的“字符串类型的存储要求”部分。

2

1

尝试使用setBlob而不是setBytes


0
只需在项目开始时执行以下查询...
SET GLOBAL max_allowed_packet = 1024*1024*number of MB

SET GLOBAL max_allowed_packet = 1024*1024*14

同时阅读this


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接