MySQL中,BLOB是一个二进制大型对象,是一个可以存储大量数据的容器,它能容纳不同大小的数据。
插入BLOB类型的数据必须使用PreparedStatement,因为BLOB类型的数据无法使用字符串拼接写的。
MySQL的四种BLOB类型(除了在存储的最大信息量上不同外,他们是等同的)

//获取连接
Connection?conn?=?JDBCUtils.getConnection();
String?sql?=?"insert?into?customers(name,email,birth,photo)values(?,?,?,?)";
PreparedStatement?ps?=?conn.prepareStatement(sql);
//java项目www.fhadmin.org
//?填充占位符
ps.setString(1,?"张强");
ps.setString(2,?"123@126.com");
ps.setDate(3,?new?Date(new?java.util.Date().getTime()));
//?操作Blob类型的变量
FileInputStream?fis?=?new?FileInputStream("xhq.png");
ps.setBlob(4,?fis);
//执行
ps.execute();
fis.close();
JDBCUtils.closeResource(conn,?ps);Connection?conn?=?JDBCUtils.getConnection();
String?sql?=?"update?customers?set?photo?=???where?id?=??";
PreparedStatement?ps?=?conn.prepareStatement(sql);
//java项目www.fhadmin.org
//?填充占位符
//?操作Blob类型的变量
FileInputStream?fis?=?new?FileInputStream("coffee.png");
ps.setBlob(1,?fis);
ps.setInt(2,?25);
ps.execute();
fis.close();
JDBCUtils.closeResource(conn,?ps);//java项目www.fhadmin.org
String?sql?=?"SELECT?id,?name,?email,?birth,?photo?FROM?customer?WHERE?id?=??";
conn?=?getConnection();
ps?=?conn.prepareStatement(sql);
ps.setInt(1,?8);
rs?=?ps.executeQuery();
if(rs.next()){
Integer?id?=?rs.getInt(1);
????String?name?=?rs.getString(2);
String?email?=?rs.getString(3);
????Date?birth?=?rs.getDate(4);
Customer?cust?=?new?Customer(id,?name,?email,?birth);
????System.out.println(cust);?
????//读取Blob类型的字段
Blob?photo?=?rs.getBlob(5);
InputStream?is?=?photo.getBinaryStream();
OutputStream?os?=?new?FileOutputStream("c.jpg");
byte?[]?buffer?=?new?byte[1024];
int?len?=?0;
while((len?=?is.read(buffer))?!=?-1){
os.write(buffer,?0,?len);
}
????JDBCUtils.closeResource(conn,?ps,?rs);
if(is?!=?null){
is.close();
}
if(os?!=??null){
os.close();
}
????
}原文:https://blog.51cto.com/u_14622073/2806099