JDBC - 学习5 -PreparedStatement - BLOB文件上传到数据库以及下载到本地电脑

10 篇文章 0 订阅


BLOB:Binary Long Object = 长二进制文件

注意: 我写的只是简单使用,并没有封装,你们可以自己封装,变成通用的方法

0. 表结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tpyDUsfC-1574125621326)(en-resource://database/9769:1)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kFlCckTM-1574125621331)(en-resource://database/9771:1)]

1. 上传图片到数据库

@Test
public void test4() {
    Connection conn = null;
    PreparedStatement ps = null;
    try {
        conn = ConnectionTest.getConnection5();

        String sql = "insert into  imgTable(name, img) values (?, ?)";
        ps = conn.prepareStatement(sql);

        // 将本地图片转换成 字节流文件
        FileInputStream fis = new FileInputStream("C:\\Users\\lrc\\Desktop\\图片\\JS原型.png");

        ps.setString(1, "JS原型图");
        ps.setBlob(2, fis);

        ps.execute();
    } catch (Exception e) {
        e.printStackTrace();
    }

    ConnectionTest.closeResource(conn, ps, null);

}

运行结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2cfLLBCp-1574125621348)(en-resource://database/9773:1)]

2. 下载数据库的BLOB文件到本地

@Test
public void test5() {
    Connection conn = null;
    PreparedStatement ps = null;
    InputStream is = null;
    FileOutputStream fos = null;
    try {
        conn = ConnectionTest.getConnection5();

        ps = conn.prepareStatement("select img from imgTable where name= ?");
        ps.setObject(1, "JS原型图");

        ResultSet rs = ps.executeQuery();

        if (rs.next()) {

            // 1. 得到查找的图片的二进制对象
            Blob img = rs.getBlob(1);
            is = img.getBinaryStream();

            // 2. 准备将1中的二进制对象,写入此到 文件输出流对象中
            fos = new FileOutputStream("C:\\Users\\lrc\\Desktop\\JS原型.png");

            // 3. 每次写入1024字节到文件输出流对象中
            byte[] buffer = new byte[1024];
            int len;
            while ((len = is.read(buffer)) != -1) {
                fos.write(buffer, 0, len);
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {

        try {
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            fos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

        ConnectionTest.closeResource(conn, ps, null);
    }

}

运行结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y1sdJDLy-1574125621351)(en-resource://database/9775:1)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值