Blob类型字段
Blob:在MySQL中 Blob是一个二进制大型对象,可以是存储大量数据的容器,他能容纳不同大小的数据,插入Blob类型的数据必须使用PrepareStatement 因为Blob类型的数据无法使用字符串拼接。
四种Blob类型:
注意:再插入时出现插入的数据太大,则需要去my.ini文件中修改配置文件: max_allowed_packet=16M。直接在会后面添加,然后重启mysql服务。
向数据表中插入大数据类型的图片
//获取连接
Connection conn = JDBCUtils.getConnection();
String sql = "INSERT INTO customers (`name`,`email`,`birth`,`photo`) VALUES(?,?,?,?)";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, "小飞侠");
ps.setString(2, "812@qq.com");
ps.setDate(3, new Date(123124141L));
// 读取图片
InputStream is = new FileInputStream(new File("zyy.jpg"));
// 将图片插入到数据表
ps.setBlob(4, is);
ps.execute();
修改数据表中的Blob类型数据
// 获取连接
Connection conn = JDBCUtils.getConnection();
String sql = "UPDATE customers SET photo = ? WHERE id=?";
PreparedStatement ps = conn.prepareStatement(sql);
InputStream is = new FileInputStream(new File("1.png"));
// 将图片插入到数据表,替换原来的数据
ps.setBlob(1, is);
ps.setInt(2, 21);
ps.execute();
JDBCUtils.closeRsource(conn, ps);
查询数据表中Blob类型的数据
Connection conn = JDBCUtils.getConnection();
String sql = "SELECT photo FROM customers WHERE id=?";
PreparedStatement ps = conn.prepareStatement(sql);
// 填充占位符
ps.setInt(1, 24);
// 获取结果集
ResultSet rs = ps.executeQuery();
if (rs.next()) {
// 获得Blob类型数据
Blob photo = rs.getBlob(1);
// 读取Blob数据
InputStream bs = photo.getBinaryStream();
OutputStream os = new FileOutputStream("gz.jpg");
byte[] bys = new byte[1024];
int len;
// 将Blob数据读出来
while ((len = bs.read(bys)) != -1) {
os.write(bys, 0, len);
}
}
JDBCUtils.closeRsource(conn, ps);