4.1 MySQL BLOB类型

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

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

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

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

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

  • 如果在指定了相关的Blob类型以后,还报错:xxx too large,那么在mysql的安装目录下,找my.ini文件加上如下的配置参数: max_allowed_packet=16M。同时注意:修改了my.ini文件之后,需要重新启动mysql服务。

4.2 向数据表中插入大数据类型

PreparedStatement对象可以使用输入和输出流来提供参数数据。能够将整个文件放入可以容纳大值的数据库列,例如CLOB大文本类型和BLOB大二进制数据类型。

有以下方法可用于流式传输数据
setAsciiStream():此方法用于提供大的ASCII值。
setCharacterStream():此方法用于提供较大的UNICODE值。
setBinaryStream():此方法用于提供较大的二进制值。
setXXXStream()方法除了参数占位符之外还需要额外的参数和文件大小。此参数通知驱动程序使用流向数据库发送多少数据。需要说明的是:图片在项目的存储:专门的图片服务器,整个服务器存储都是图片, 华为云服务器,购买华为云服务器可以直接使用, 提供一套API,我们调用这些API就可以存储到华为云,存储成功之后返回一个HTTP地址,可以通过http访问整个图片.当然阿里云也有类似的存储.业界里还有一个公司提供存储服务器,七牛云,提供存储服务,特别是图片服务器.

//获取连接
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);

4.3 修改数据表中的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);

4.4 从数据表中读取大数据类型

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

4.5 操作大文本对象

//读取大文本数据,了解知识
public static void readCLOB() {Connection conn = null;PreparedStatement pstmt = null;ResultSet rs = null;String sql="select * from student where s_id=?";try {conn = DBUtil.getConnection();pstmt = conn.prepareStatement(sql);pstmt.setString(1, "11");rs = pstmt.executeQuery();if(rs.next()) {String sname = rs.getString("s_name");String sid = rs.getString(1);Date sbirth = rs.getDate("s_birth");System.out.println(sid+"\t"+sname+"\t"+sbirth);Reader reader = rs.getCharacterStream("s_resume");//保存读取到数据FileWriter writer = new FileWriter("d:\\test.txt");char [] txt = new char[1024];int len = 0;while(  (len=reader.read(txt))!= -1 ) {writer.write(txt, 0, len);}writer.close();reader.close();}} catch (Exception e) {e.printStackTrace();}finally {DBUtil.closeAll(null, pstmt, conn);}
}
//存储大文本数据,了解知识
public static void saveCLOB() {Connection conn = null;PreparedStatement pstmt = null;String sql="update student set s_resume=? where s_id=?";try {conn = DBUtil.getConnection();pstmt = conn.prepareStatement(sql);//根据提供的文件创建输入流FileReader reader  =new FileReader("d:\\data.txt");pstmt.setCharacterStream(1, reader);pstmt.setString(2, "11");int rows = pstmt.executeUpdate();if (rows>0) {System.out.println("操作成功");} else {System.out.println("操作失败");}} catch (SQLException | FileNotFoundException e) {e.printStackTrace();}finally {DBUtil.closeAll(null, pstmt, conn);}
}

第25章 JDBC核心技术第4节:操作BLOB类型字段相关推荐

  1. 第25章 JDBC核心技术第3节

    第3节:实现CRUD操作 3.1 操作和访问数据库 数据库连接被用于向数据库服务器发送命令和 SQL 语句,并接受数据库服务器返回的结果.其实一个数据库连接就是一个Socket连接. 在 java.s ...

  2. JDBC:软件架构、概述、数据库连接:普通项目添加jar包,URL、sql注入,类型转换,查询流程表、操作BLOB类型字段、批量插入,替换jar包、事务/数据库连接池

    0 常识说明 0.1 软件架构方式介绍 B/S架构:浏览器 与 服务器之间的交互. C/S架构:安装的本地软件(如:今日头条等) 与 服务器进行交互. 0.2 JavaWeb技术概览 JDBC核心技术 ...

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

    JDBC详解(四):操作BLOB类型字段 前言 一.MySQL BLOB类型 二.向数据表中插入大数据类型 三.修改数据表中的Blob类型字段 四.从数据表中读取大数据类型 前言 本博主将用CSDN记 ...

  4. JDBC学习总结(二)JDBC操作Blob类型字段高效的批量插入JDBC处理数据库事务将多个SQL看成一个事务执行数据库连接池C3P0DBCPDruidDBUtils工具类实现CRUD

    JDBC学习总结(二)JDBC操作Blob类型字段/高效的批量插入/JDBC处理数据库事务/将多个SQL看成一个事务执行/数据库连接池C3P0/DBCP/Druid/DBUtils工具类实现CRUD ...

  5. jdbc之操作BLOB类型字段

    MySQL BLOB类型 MySQL中,BLOB是一个二进制大型对象,是一个可以存储大量数据的容器,它能容纳不同大小的数据. 插入BLOB类型的数据必须使用PreparedStatement,因为BL ...

  6. JDBC四:操作Blob类型字段

    操作Blob类型字段 向数据表中插入Blob类型的字段 Blobl类型的字段是一个文件,文件的传输需要进行IO流操作 @Testpublic void testBlob() {Connection c ...

  7. 【云原生进阶之容器】第一章Docker核心技术1.6节——UnionFS

    <重识云原生系列>专题各章首节索引: 第一章--不谋全局不足以谋一域 第二章计算第1节--计算虚拟化技术总述 第三章云存储第1节--分布式云存储总述 第四章云网络第一节--云网络技术发展简 ...

  8. 【云原生进阶之容器】第一章Docker核心技术1.1节——Docker综述

    1 Docker简述 1.1 什么是Docker Docker是一个开源的软件项目,让用户程序部署在一个相对隔离的环境运行,借此在Linux操作系统上提供一层额外的抽象,以及操作系统层虚拟化的自动管理 ...

  9. 深入浅出JDBC核心技术

    文章目录 JDBC核心技术--课程笔记 第1章:JDBC概述 1.1 数据的持久化 1.2 Java中的数据存储技术 1.3 JDBC介绍 1.4 JDBC体系结构 1.5 JDBC程序编写步骤 第2 ...

最新文章

  1. lstm 根据前文预测词_干货 | Pytorch实现基于LSTM的单词检测器
  2. Linux 初始化脚本 (centos6 centos7 通用)
  3. 【git】----- clone 及上传文件
  4. bootstrap-table 行合并和列合并,以及固定列宽度等问题
  5. 在python3中如何加载静态文件详版步骤
  6. 用Java控制小电灯-树莓派PI4J
  7. 不到三千买iPhone12 网友:抢到算我输
  8. 【白皮书分享】快手私域经营白皮书.pdf(附下载链接)
  9. wps计算机一级考试提纲,2017计算机一级考试大纲:WPS Office (汇总)
  10. linux下 环境搭建教程,Linux环境下搭建pNFS使用环境教程
  11. fdisk、parted无损调整普通分区大小
  12. VS编译报错Error2019
  13. EasyUI:Parser 解析器
  14. python中字符编码:coding utf-8, unicde, defaultencoding, UnicodeDecodeError, UnicodeEncodeError
  15. 斯坦福大学自然语言处理第五课“拼写纠错(Spelling Correction)”
  16. java进度条_Java实现进度条开发过程
  17. html添加购买按钮,萤火小程序商城给前端和商品组件增加“购买”按钮的方法...
  18. win10禁用笔记本键盘
  19. Arduino Uno + PAJ7620U2 实现手势识别控制LED灯工作
  20. Ubuntu下ping命令提示域名解析失败以及无法打开网页

热门文章

  1. 电子邮箱哪家最安全,各家电子邮箱安全性盘点!
  2. cannot import watershed from skimage.morphology
  3. 前方高能!吹爆这份HTTP顶级教程
  4. php中ceil的用法,php ceil函数怎么用?
  5. Java微信浏览器上传文件使用Base64方法(增加压缩上传方法)
  6. AliSSR 语音超分算法:让在线会议语音更明亮更自然
  7. 新装Linux软件安装与系统配置
  8. 改进Bootstrap中的响应式侧边栏
  9. 用单片机c51电子秤的c语言,基于51单片机的电子秤系统设计
  10. 功能点(FP)分析详细解释