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

先介绍下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;
    }

你可能感兴趣的:(java,数据库)