JDBC如何插入Blob类型字段

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);
   

本文地址:https://blog.csdn.net/weixin_48479053/article/details/107658116

(0)
上一篇 2022年3月21日
下一篇 2022年3月21日

相关推荐