老师怎么把小图片直接转为Blob 存入数据库啊!搞了一天没有搞好

老师怎么把小图片直接转为Blob 存入数据库啊!搞了一天没有搞好

我用的是注解的反法把java实体存入数据库,发现会自动的帮你把图片存入

但是如果我要把图片自己转为Blob存入数据库,搞不定,网上也没有确切的答案

希望老师告诉我,怎么吧图片自己转换为Blob,存入数据库?

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

5回答
提问者 iStream 2018-12-28 11:54:55

已经自己解决

用这个${}传递图片可能是语法错误的


好帮手慕珊 2018-12-28 09:34:01

你好!你可以试试下面的这段代码,这里是写了一个例子,从本地读的文件。如果是从网页上传的,可以写成byte[] b=item.get(); Blob blob=new SerialBlob(b); item.get()是获取的图片对应的二进制数组;还有三个类需要导入

import java.sql.Blob;

import javax.sql.rowset.serial.SerialBlob;

import javax.sql.rowset.serial.SerialException;

try {
FileInputStream fis=new FileInputStream("1.png");
byte[] b=new byte[1024*30];
int n=fis.read(b);
Blob blob=new SerialBlob(b);
} catch (FileNotFoundException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}
catch (SerialException e) {
e.printStackTrace();
}catch (SQLException e) {
e.printStackTrace();
}

另外,还是建议把代码中的Blob改成byte[] ,Blob就是对应二进制字节数组,这个也是开发中的常用方式,不用再额外进行转换。

http://img1.sycdn.imooc.com//climg/5c257dae0001a67006410114.jpg

在实体类中,smallImg字段改成byte[]类型

http://img1.sycdn.imooc.com//climg/5c257e0900010ece03420052.jpg

Blob在使用ResultSet的get方法获取数据时会用到,存储数据时一般还是用二进制字节数组。

祝学习愉快!

  • 提问者 iStream #1
    老师你这个是java 的 Blob 不是 mysql 的Blob 数据不匹配异常 ### The error occurred while setting parameters
    2018-12-28 10:34:07
  • 提问者 iStream #2
    我自己之前也尝试了很多byte[],buffer 都不可以!!!
    2018-12-28 10:44:57
  • 提问者 iStream #3
    我之前就是这样写的 https://class.imooc.com/course/qadetail/85274
    2018-12-28 11:03:02
chrismorgen 2018-12-27 19:44:28

你好同学,二进制的字节数组就对应了数据库中的Blob,不用再转换,可以参考这个代码。下面代码中setSmallImg是Cake类的set方法,参数是二进制的字节数组,item是FileItem item的对象,item.get()就获取了图片的二进制流,是一个字节数组

http://img1.sycdn.imooc.com//climg/5c24bb180001db6604810156.jpg祝学习愉快~


  • 提问者 iStream #1
    这个是java反射后 内部把baty转换为Blob存入数据库的, 不是我说的自己把二进制数组转为数据库的Blob存入的!!!!!! Blob有很多种,有数据库Blob,还有java的Blob, 为什么老是转移问题!!! 问题是: 图片转为Blob 存入数据库
    2018-12-27 20:21:44
  • 提问者 iStream #2
    为什么老是绕开的问题!
    2018-12-27 20:28:28
  • 提问者 iStream #3
    我把场景告诉你你看怎么解决 @insert(“insert into gallery values(${smalImage},${bigImagePath} where id = ${id})”) public add(@Param(id)int id,@Param(smalImage)Blob smalImage,@Param(bigImagePath)Sreing bigImagePath ); 我的场景就是这样,无法解决Blob,的问题。
    2018-12-27 20:37:28
chrismorgen 2018-12-27 19:24:56

你好同学,你的研究方向不对哦,你可以向数据库中存储图片地址试试,这样不会影响数据库的存储性能的,祝学习愉快~

  • 提问者 iStream #1
    你的回答实在无语,小图片ok!!
    2018-12-27 19:29:26
  • chrismorgen 回复 提问者 iStream #2
    同学,你好!图片不论大小,他的存储方式是一样的。一种是直接以二进制流的形式存储到数据库中,另一种是将图片保存到服务器,将图片地址存储到数据库中。你是想在数据库中直接以图片格式存储,不是二进制吗?祝学习愉快~
    2018-12-27 19:41:46
慕布斯645313 2018-12-27 19:00:44

兄弟你可以看一下这个博客的实例代码,https://blog.csdn.net/weixin_39800144/article/details/80225990

其实Blob就是存储2进制数据的一个容器,你只要把文件转换成2进制就可以存储了,不过还是使用注解存储吧,注解的封装原理也是将文件转换成2进制。这样更方便。

  • 提问者 iStream #1
    哥们你太菜了,你的这个文章里Blob都没有出现过!
    2018-12-27 19:05:57
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
Java数据库开发与实战应用2018版
  • 参与学习           人
  • 提交作业       277    份
  • 解答问题       4297    个

Java数据库开发的必备技能,从流行的MySQL数据库开始,到Java原生的数据库管理接口JDBC的使用,再到常用的数据持久化框架MyBatis,让你向Java工程师的目标又迈进了一步!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师