MySQL 中Blob类型数据的插入和读取

在MySQL中Blob是一个二进制的对象,它是一个可以存储大量数据的容器(如图片,音乐等等),且能容纳不同大小的数据,在MySQL中有四种Blob类型,他们的区别就是可以容纳的信息量不容分别是以下四种:
      ①TinyBlob类型  最大能容纳255B的数据
      ②Blob类型  最大能容纳65KB的
      ③MediumBlob类型  最大能容纳16MB的数据
      ④LongBlob类型  最大能容纳4GB的数据
      而在我们实际使用的时候,可以根据自己的需求选择这几种类型,但是如果Blob中存储的文件的大小过大的话,会导致数据库的性能很差。下面具体介绍一下插入Blob类型的数据以及读取Blob类型的数据的方式:
1、插入Blob类型的数据
      插入Blob类型的数据时,需要注意必须要用PreparedStatement,因为Blob类型的数据是不能够用字符串来拼的,在传入了SQL语句后,就需要去调用PreparedStatement对象中的setBlob(int index , InputStream in)方法来设置传入的的参数,其中index表示Blob类型的数据所对应的占位符(?)的位置,而InputStream类型的in表示被插入文件的节点流。
2、读取Blob类型的数据
      读取Blob类型相对来说比较容易,当获取了查询的结果集之后,使用getBlob()方法读取到Blob对象,然后调用Blob的getBinaryStream()方法得到输入流,再使用IO操作进行文件的写入操作即可。
下面是具体例子来实现Blob类型数据的插入和读取操作:
现在本地数据库中有这样一个表animal,其中picture中存放的数据类型为MediumBlob类型

贴上自己试验的代码

# 向数据库插入数据
for i, key in enumerate(list(update_container.keys())):
    value = update_container[key].value
    value_str = value.tostring()
    shape = value.shape
    sql = 'insert into face_emb(uid, shape, emb) values (%s, %s, %s)'
    test_mysql.executeSqlManyByConn(sql, [key, str(shape[0]), value_str])
# 从数据库读取数据,转换成需要格式
sql = 'select * from face_emb'
s = test_mysql.executeSqlByConn(sql)
print(s)
s1 = s.fetchall()
for i in range(len(s1)):
    userid, shape, emb_bytes = s1[i]
    tmb_list = np.fromstring(emb_bytes, dtype=np.float32)
    emb = tmb_list.reshape(shape, -1)
    print(emb.shape)

--------------------- 
作者:鲸鱼programmer 
来源:CSDN 
原文:https://blog.csdn.net/qq_38785658/article/details/75009700 
版权声明:本文为博主原创文章,转载请附上博文链接!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值