java调用数据库Blob对象图片的简单方法(不需要Blob接收)

本文详细介绍了如何在Java中处理MySQL数据库中的BLOB类型图片数据,包括读取、转换为Base64字符串及写入文件的过程。通过具体代码示例,展示了从数据库获取BLOB数据并进行操作的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先介绍下blob:

BLOB (binary large object),二进制大对象,是一个可以存储二进制文件的容器。

BLOB是一个大文件,典型的BLOB是一张图片或一个声音文件,由于它们的尺寸,必须使用特殊的方式来处理(例如:上传、下载或者存放到一个数据库)。

MySQL中,BLOB是个类型系列,包括:TinyBlob、Blob、MediumBlob、LongBlob,这几个类型之间的唯一区别是在存储文件的最大大小上不同。

MySQL的四种BLOB类型

类型                           大小(单位:字节)

TinyBlob                    最大 255

Blob                           最大 64K

MediumBlob              最大16M

LongBlob                   最大 4G


项目中遇到的,需要从数据库中调用字段类型为blob的图片文件,由于项目架构的特殊性,网上看到的关于使用Blob接收图片的方法在本次使用中均不能使用(在java中接收,使用Blob接收报错),最后通过如下方法解决(红色标记部分):

public String QMTP(HttpServletRequest request) {
        String jsonObj = "";
        JSONObject jp = new JSONObject();
        JSONArray jsonRowdata = new JSONArray();
        InputStream is = null;
        OutputStream os = null;

        try {
            String zyys = request.getParameter("zyys") == null ? ""
                    : URLDecoder.decode(request.getParameter("zyys"), "utf-8");
            String sql = "SELECT qmtp,bh FROM yhxxb WHERE yhxm = '" + zyys + "'limit 0,1";
            CachedRowSetImpl crs = null;
            crs = cls.executeQuery(sql);
            while (crs.next()) {
                JSONObject json = new JSONObject();
                is = crs.getBinaryStream(1); // 接收
                json.put("BH", crs.getString("bh"));
                String path = request.getRealPath("/")+"QMImg//" + crs.getString("bh") + ".jpg"; //图片路径
                File file = new File(path); //写出
                Img2Base64Util base64 = new Img2Base64Util();
                String Base64 = base64.getImgStr(path);
                json.put("Base64", Base64);
                System.out.println("Base64---"+Base64);
                if (!file.exists()){
                    os = new FileOutputStream(file);
                    int num;
                    byte buf[] = new byte[1024];
                    while ((num = is.read(buf)) != -1) {
                        os.write(buf, 0, num);
                    }
                }

                jsonRowdata.put(json);
            }
            jp.put("rows", jsonRowdata);
            jp.put("type", "list");
            jsonObj = jp.toString();
        } catch (Exception e) {
            e.printStackTrace();
            logger.info(e.getClass() + "----" + e.getMessage());
        }
        return jsonObj;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值