当前位置: 首页 > article >正文

JDBC详解(四):操作BLOB类型字段(超详解)

JDBC详解(四):操作BLOB类型字段

  • 前言
  • 一、MySQL BLOB类型
  • 二、向数据表中插入大数据类型
  • 三、修改数据表中的Blob类型字段
  • 四、从数据表中读取大数据类型



前言

本博主将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识,有兴趣的小伙伴可以关注博主!也许一个人独行,可以走的很快,但是一群人结伴而行,才能走的更远!

一、MySQL BLOB类型

⭕ MySQL中,BLOB是一个二进制大型对象,是一个可以存储大量数据的容器,它能容纳不同大小的数据。

⭕ 插入BLOB类型的数据必须使用PreparedStatement,因为BLOB类型的数据无法使用字符串拼接写的。

⭕ MySQL的四种BLOB类型(除了在存储的最大信息量上不同外,他们是等同的)

在这里插入图片描述

⭕ 实际使用中根据需要存入的数据大小定义不同的BLOB类型。

⭕ 需要注意的是:如果存储的文件过大,数据库的性能会下降。

⭕ 如果在指定了相关的Blob类型以后,还报错:xxx too large,那么在mysql的安装目录下,找my.ini文件加上如下的配置参数: max_allowed_packet=16M。同时注意:修改了my.ini文件之后,需要重新启动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, "xhq@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);

三、修改数据表中的Blob类型字段

Connection conn = JDBCUtils.getConnection();
String sql = "update customers set photo = ? where id = ?";
PreparedStatement ps = conn.prepareStatement(sql);

// 填充占位符
// 操作Blob类型的变量
FileInputStream fis = new FileInputStream("coffee.png");
ps.setBlob(1, fis);
ps.setInt(2, 25);

ps.execute();

fis.close();
JDBCUtils.closeResource(conn, ps);

四、从数据表中读取大数据类型

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


http://www.kler.cn/a/16809.html

相关文章:

  • 如何从头开始构建神经网络?(附教程)
  • 车载空气净化器语音芯片方案
  • 【 ElementUI 组件Steps 步骤条使用新手详细教程】
  • 网络远程操控
  • 闯关leetcode——3174. Clear Digits
  • 同三维T610UDP-4K60 4K60 DP或HDMI或手机信号采集卡
  • Python做个猫狗识别系统,给人美心善的邻居
  • matlab for循环详解
  • 其他自定义代码片段
  • 设计模式--装饰者模式
  • JSP+Struct+MySql基于BBS管理系统设计与实现(源代码+论文+中英资料+开题报告+答辩PPT)
  • Java 怎样实现代理模式,有什么优缺点
  • ospf扩展配置—认证、沉默接口、加快收敛、缺省路由
  • 2023-04-23 学习记录--C/C++-邂逅C/C++(中)
  • hive 清空分区表 多姿势对比
  • 微服务知识2
  • C语言文件操作【基础知识 + 顺序读写 + 文件版通讯录】
  • 【Java笔试强训 17】
  • maven install的时候报Unable to find main class
  • 财报解读:照明行业景气上行,欧普照明已步入增长“快车道”
  • Noah-MP陆面过程模型建模方法与站点、区域模拟实践技术
  • linux命令之tar详解
  • 快速了解车联网V2X通信
  • 接踵而至,昆仑万维天工大语言模型发布
  • Linux必会100个命令(六十)curl
  • 小满nestjs(第二十八章 nestjs 事务)