【JDBC】题目:从数据表中读取Blob类型数据
前言:
- 向数据表中插入Blob类型数据
实现:
// 查询数据表customers中的Blob类型字段
@Test
public void testQuery() throws Exception {
// 获取数据库连接(利用封装好的工具类)
Connection conn = JDBCUtils.getConnection();
// 预编译sql语句
String sql = "SELECT id, name, email, birth, photo FROM customers WHERE id = ?";
PreparedStatement ps= conn.prepareStatement(sql);
ps.setInt(1, 20);
// 获取结果集
ResultSet rs = ps.executeQuery();
if(rs.next()){
// 此次最好运用ORM编程思想,展示方便,使用别名的方式将结果逐个取出
int id = rs.getInt("id");
String name = rs.getString("name");
String email = rs.getString("email");
Date birth = rs.getDate("birth");
Customer cust = new Customer(id, name, email, birth);
System.out.println(cust);
// 重点
// 将Blob类型的字段下载下来,以文件的形式保存在本地
Blob photo = rs.getBlob("photo");
InputStream is = photo.getBinaryStream();
// 输出流,存放位置
FileOutputStream fos = new FileOutputStream("juruoBlob.png");
// 文件保存到本地
byte[] buffer = new byte[1024];
int len;
while((len = is.read(buffer)) != -1){
fos.write(buffer, 0, len);
}
}
// 关闭资源
// is.close();
// fos.close();
JDBCUtils.closeResource(conn, ps, rs);
}
特殊情况说明:
在MySQL中,明明MediumBlob能存放16MB大小的二进制文件,但实际能存储的图片要小的多(? > 1048576(1 MB))
解决方法:
在MySQL配置文件my.ini文件末尾添加如下信息。并重启MySQL服务。
max_allowed_packet=16M