【JDBC】题目:向数据表中插入Blob类型数据
前言:
PreparedStatement除了解决Statement的拼串、sql注入问题之外,还可以实现以下操作
- PreparedStatement操作Blob的数据,而Statement做不到。
- PreparedStatement可以实现更高效的批量操作。
场景:
在下图customer表中,photo字段为mediumblob类型
场景知识拓展:
BLOB是一个二进制大型对象,是一个可以存储大量数据的容器,插入BLOB类型的数据必须使用PreparedStatement,因为BLOB类型的数据无法使用字符串拼接写的。
MySQL的四种BLOB类型(除了在存储的最大信息量上不同外,他们是等同的):
实现如下:
public class BlobTest {
// 向数据表customers中插入Blob类型的字段
@Test
public void testInsert() throws Exception {
// 获取数据库连接(利用封装好的工具类)
Connection conn = JDBCUtils.getConnection();
// 预编译sql语句
String sql = "insert into customers(name, email, birth, photo) values (?, ?, ?, ?)";
PreparedStatement ps= conn.prepareStatement(sql);
// 填充占位符
ps.setObject(1, "小帅");
ps.setObject(2, "juruo@qq.com");
ps.setObject(3, "2001-07-12");
// Blob 太大,通过inputStream 流以文件的方式传输
// 图片放置在当前工程下
FileInputStream is = new FileInputStream(new File("C:\\Users\\19048\\Pictures\\juruo.png"));
ps.setBlob(4, is);
// 执行
ps.execute();
// 关闭资源
JDBCUtils.closeResource(conn, ps);
}
}