欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-01-23 22:08:46
...


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

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

0. 表结构

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

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

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);

}

运行结果

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

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);
    }

}

运行结果

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