【问题标题】:Adding Image to a database in Java在 Java 中将图像添加到数据库
【发布时间】:2010-10-12 01:55:27
【问题描述】:

我正在尝试将图像添加到 mysql 数据库中的 BLOB 字段。图像的大小将小于 100kb。但是我遇到了问题,想知道将这些数据添加到数据库的更好方法是什么?

com.mysql.jdbc.MysqlDataTruncation:数据截断:第 1 行的“数据”列的数据太长

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 Definition for the table

在将数据字段类型更改为 Mediumblob 并尝试将 140kb 图像文件放入数据库后,我收到了另一个错误。

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

问题是我尝试将数据添加到数据库的方式。我应该采取不同的方法吗?如果是这样,那是什么方式?

【问题讨论】:

  • 发布您尝试添加图像的表的定义可能值得。

标签: java mysql jdbc


【解决方案1】:

尝试使用MEDIUMBLOB 而不是BLOBBLOB 限制为 64KB,而 MEDIUMBLOB 列可以容纳 16MB。

请参阅this page 的“字符串类型的存储要求”部分。

【讨论】:

    【解决方案2】:

    要处理 PacketTooBigException,您似乎需要调整配置变量 max_allowed_pa​​cket。见http://dev.mysql.com/doc/refman/5.1/en/packet-too-large.html。但是,默认情况下 MySQL 5.1 应该不会给您带来高达 1MB 的问题。您使用的是什么版本的 MySQL(服务器和客户端)。

    【讨论】:

      【解决方案3】:

      尝试用 setBlob 代替 setBytes

      【讨论】:

        【解决方案4】:

        只需在项目开始时执行以下查询...

        SET GLOBAL max_allowed_packet = 1024*1024*number of MB
        

        SET GLOBAL max_allowed_packet = 1024*1024*14
        

        另请阅读this

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-05-12
          • 2014-01-29
          • 2020-03-25
          • 1970-01-01
          • 1970-01-01
          • 2021-02-20
          • 2011-06-03
          • 1970-01-01
          相关资源
          最近更新 更多