使用java在数据库中存储BLOB类型字段
一、介绍
- (1)BLOB是一个二进制大型对象,是一个可以存储大量数据的容器,可以容纳不容大小的数据
- (2)BLOB数据必须使用PreparedStatement来操作
- (3)BLOB的不同类型
类型 | 大小(单位:字节) |
---|---|
TinyBlob | 最大255 |
Blob | 最大65K |
MediumBlob | 最大16M |
LongBlob | 最大4G |
- (4)注意:存储数据过大,数据库性能会下降
- (5)如果修改了数据类型,仍然出现数据过大,需要寻找my.ini配置文件,添加参数max_alllowed_paket=16M,并重启mysql服务器
二、操作方法
1.存入BLOB数据
(1)创建一个文件输入流
(2)利用PreparedStatement对象的
void setBlob(int parameterIndex, InputStream inputStream)
填充占位符(3)执行sql语句
JDBCUtils是自定义类,具体封装的方法,请看“【JDBC】使用PreparedStatement实现CRUD操作”
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public void addTest() throws Exception {
//1.连接数据库
Connection conn = JDBCUtils.getConnection();
//2.创建PreparedStatement对象
String sql = "insert into customers(name, email, birth, photo) values(?, ?, ?, ?)";
PreparedStatement ps = conn.prepareStatement(sql);
//3.填充占位符'?'
ps.setObject(1, "艾米莉亚");
ps.setObject(2,"emi@qq.com");
ps.setObject(3,"1999-09-09");
//4.BLOB数据填充占位符
FileInputStream fis = new FileInputStream(".\\src\\艾米莉亚.jpg");
ps.setBlob(4, fis);
//5.执行sql语句
ps.execute();
//6.资源关闭,连接关闭
fis.close();
JDBCUtils.close(conn, ps);
//7.try-catch处理异常(省略)
}
2.取出BLOB数据
- 利用
Blob getBlob(String columnLabel)
读取BOLB数据 - BLOB对象使用
java.io.InputStream getBinaryStream ()
来获取输入流 - 利用IO流操作,保存到本地
1 |
|