【问题标题】:How to save byte data in Blob column of database如何将字节数据保存在数据库的 Blob 列中
【发布时间】:2014-08-14 17:12:49
【问题描述】:

我正在尝试在我的项目某处用 Java 执行此代码

INSERT INTO registered_user (user_image,user_Email,phone_No,pin)
VALUES ('"+blob+"','"+reqData.getEmail()+"' ,'"+reqData.getPhoneNo()+"','"+reqData.getPin()+"')

我将 blob 声明为

  byte[] b=(rqData.getUserImage());// getter method and has length of 6439==>b.length
  Blob blob=blob=new SerialBlob(b);    

reqData.getUserImage 是(POJO 类)

byte[] userImage;
public byte[] getUserImage() {
    return userImage;
}
public void setUserImage(byte[] userImage) {
    this.userImage = userImage;
}

另外,其他人是吸气剂,我正在获得价值

但我在执行此语句时正在控制台上

INSERT INTO registered_user (user_image,user_Email,phone_No,pin)
VALUES ('javax.sql.rowset.serial.SerialBlob@4dad2f','clientcode17@example.com' ,'null',
'123456789')

我的问题是关于查询中的第一个值。我已在数据库中将 user_image 列声明为 Blob,在这里我也发送 Blob 数据,但它是一个对象。 Blob,在我的例子中,blob 的长度为 6439,但在数据库中它仅保存 30-32 个字节。如何将数据库中的字节保存为 Blob 有什么问题。

提前致谢。

【问题讨论】:

    标签: java mysql hibernate hql blob


    【解决方案1】:

    这行代码正在将你的 blob 对象转换为字符串:

    insert into registered_user (user_image,user_Email,phone_No,pin) values ('"+blob+"','"+reqData.getEmail()+"' ,'"+reqData.getPhoneNo()+"','"+reqData.getPin()+"')
    

    您需要更改插入代码以使用准备好的语句:

    String query = "insert into registered_user (user_image,user_Email,phone_No,pin) values (?,?,?,?)";
    
    PreparedStatement statement = con.prepareStatement(query);
    statement.setBlob(1, blob);
    
    //continue setting parameters
    

    这里有完整的例子 - http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html

    【讨论】:

    • 我明白了,但我使用的是 Hibernate,有什么替代方法可以不使用 Prepared 语句来做类似的事情吗?
    • @ajitksharma 也许使用参数化查询?
    猜你喜欢
    • 2016-11-04
    • 2015-11-15
    • 1970-01-01
    • 1970-01-01
    • 2018-11-12
    • 1970-01-01
    • 2011-02-14
    • 1970-01-01
    • 2012-04-28
    相关资源
    最近更新 更多