Blob字段的插入和读取

Blob字段的插入和读取

1. Blob的定义

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

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

2. Mysql中的blob类系列

​ MySQL的四种BLOB类型

类型 大小(单位:字节)
TinyBlob 最大 255
Blob 最大 65K
MediumBlob 最大 16M
LongBlob 最大 4G

3. MySQL修改默认Blob数据类型大小

​ mysql一般默认下是1M

3.1 修改my.ini文件

​ 找到MySql Server的安装目录,打开my.ini文件,在[mysqld]下面,增加一行: max_allowed_packet=16M

3.2 重启MySql服务

4. Blob字段的插入和读取(code)

package com.shan.blob;



import com.shan.bean.Customer;
import com.shan.util.JDBCUtils;

import java.io.*;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

/**
 * 在mysql中使用的是MediumBlob
 * 测试使用PrepareStatement操作Blob类型的数据
 * @author shan
 * @date 2021/5/13
 */
public class BlobTest {
    public static void main(String[] args) throws Exception {
        //testInsert();
        testQuery();
    }
    //向数据表customers中插入Blob字段
    public static void testInsert() throws Exception {
        Connection conn = JDBCUtils.getConnection();
        String sql = "insert into customers(name,email,image)value(?,?,?)";
        PreparedStatement ps = conn.prepareStatement(sql);
        ps.setObject(1,"薛之谦");
        ps.setObject(2,"szq@126.com");
        FileInputStream image = new FileInputStream(new File("E:\\code\\Java\\jdbc\\static\\image\\img.png"));
        ps.setBlob(3,image);
        ps.execute();
        JDBCUtils.closeResource(conn,ps);

    }

    //查询数据表customers中的Blob字段
    public static void testQuery() throws Exception {

        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        InputStream is = null;
        FileOutputStream fos = null;

        try {
            conn = JDBCUtils.getConnection();
            String sql = "select id,name,email,image from customers where id = ?";
            ps = conn.prepareStatement(sql);
            ps.setInt(1, 5);
            rs = ps.executeQuery();
            if (rs.next()) {
                //方式一:
                //            int id = rs.getInt(1);
                //            String name = rs.getString(2);
                //            String email = rs.getString(3);


                //方式二:
                int id = rs.getInt("id");
                String name = rs.getString("name");
                String email = rs.getString("email");

                Customer cust = new Customer(id, name, email);
                System.out.println(cust);

                //将Blob类型的字段下载下来,以文件的方式保存到本地
                Blob image = rs.getBlob("image");
                is = image.getBinaryStream();
                fos = new FileOutputStream("E:\\code\\Java\\jdbc\\static\\image\\demo.png");
                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 {
                if (is != null)
                    is.close();
            }catch (IOException e){
                e.printStackTrace();
            }
            try {
                if (is != null)
                    fos.close();
            }catch (IOException e){
                e.printStackTrace();
            }


            JDBCUtils.closeResource(conn,ps,rs);
        }

    }
}

关于其他的一些配置文件,可以在本博客JDBC其他的文章提到。

上一篇:css: jquery login status control


下一篇:前端常用图片文件下载上传方法