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其他的文章提到。