操作 BLOB 类型字段

MySQL BLOB 类型

  • MySQL 中,BLOB 是一个二进制大型对象,是一个可以存储大量数据的容器,它能容纳不同大小的数据。
  • 插入 BLOB 类型的数据必须使用 PreparedStatement ,因为 BLOB 类型的数据无法使用字符串拼接写的。
  • MySQL 的四种 BLOB 类型(除了在存储的最大信息量上不同外,他们是等同的):
    • TinyBlob,最大 255 Byte;
    • Blob,最大 65 KB;
    • MediumBlod,最大 16 MB;
    • LongBlod,最大 4 GB。

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

package cn.parzulpan.jdbc.ch04;

import cn.parzulpan.jdbc.bean.Customer;
import cn.parzulpan.jdbc.util.JDBCUtils;
import org.junit.Test; import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.sql.*; /**
* @Author : parzulpan
* @Time : 2020-12-01
* @Desc : 操作 BLOB 类型字段
*/ public class BLOBTypeTest { // 向数据表中插入大数据类型
@Test
public void insertBLOBType() throws Exception {
Connection connection = JDBCUtils.getConnection();
String sql = "insert into customers(name, email, birth, photo)values(?,?,?,?)";
PreparedStatement ps = connection.prepareStatement(sql); ps.setString(1, "猫猫");
ps.setString(2, "cat@gmail.com");
ps.setDate(3, new Date(new java.util.Date().getTime())); //
FileInputStream fis = new FileInputStream(new File("cat.png"));
ps.setBlob(4, fis); ps.execute(); fis.close();
JDBCUtils.closeResource(connection, ps);
} // 修改数据表中的大数据类型
@Test
public void updateBLOBType() throws Exception{
Connection connection = JDBCUtils.getConnection();
String sql = "update customers set photo = ? where name = ?";
PreparedStatement ps = connection.prepareStatement(sql); // 批量插入
FileInputStream fis = new FileInputStream(new File("girl.jpg"));
ps.setBlob(1, fis);
ps.setString(2, "猫猫"); ps.execute(); fis.close();
JDBCUtils.closeResource(connection, ps);
} // 从数据表中读取大数据类型
@Test
public void queryBLOBType() throws Exception{
Connection connection = JDBCUtils.getConnection();
String sql = "select id, name, email, birth, photo from customers where id = ?";
PreparedStatement ps = connection.prepareStatement(sql);
ps.setInt(1, 22); ResultSet rs = ps.executeQuery();
if (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
String email = rs.getString("email");
Date birth = rs.getDate("birth");
Customer customer = new Customer(id, name, email, birth);
System.out.println(customer); //
Blob photo = rs.getBlob("photo");
InputStream is = photo.getBinaryStream();
FileOutputStream fos = new FileOutputStream(new File("cat-sql.png"));
byte[] buffer = new byte[1024];
int data = 0;
while ((data = is.read(buffer)) != -1) {
fos.write(buffer, 0, data);
} JDBCUtils.closeResource(connection, ps, rs); fos.close();
is.close(); }
}
}

总结和练习

【JDBC核心】操作 BLOB 类型字段的更多相关文章

  1. Spring JDBC处理BLOB类型字段

    以下示例将演示使用spring jdbc更新BLOB类型的字段值,即更新student表中的可用记录. student表的结构如下 - CREATE TABLE student( ID INT NOT ...

  2. mybatis oracle BLOB类型字段保存与读取

    一.BLOB字段 BLOB是指二进制大对象也就是英文Binary Large Object的所写,而CLOB是指大字符对象也就是英文Character Large Object的所写.其中BLOB是用 ...

  3. oracle 在操作blob该字段是否会产生很多redo

    操作blob该字段是否会产生很多redo,答案是否定的.以下来做一个实验,測试数据库版本号是11.2.0.1.0: --创建一张表做測试之用 create table test_blob (   id ...

  4. Oracle中,如何将String插入到BLOB类型字段

    1,String插入到BLOB类型字段,(这里的字符串以生成的XML为例): String XML = document.asXML();  //使用dom4j写成的xml是String类型,记得st ...

  5. oracle中如何判断blob类型字段是否为空

    eg.假如有表T_GA_GRJBXX  ,字段zp是blob类型 查询blob非空的记录 SELECT * FROM u_rs_sjgx.T_GA_GRJBXX TB WHERE TB.zp IS n ...

  6. SQLite中如何用api操作BLOB类型的字段

    在实际的编程开发当中我们经常要处理一些大容量二进制数据的存储,如图片或者音乐等等.对于这些二进制数据(blob字段)我们不能像处理普通的文本那样简单的插入或者查询,为此SQLite提供了一组函数来处理 ...

  7. PDM->OOM->C#实体类生成时,对Blob类型字段的处理

    pdm中的Blob字段生成OOM时,自动变成了string类型,再生成实体类时也是string 如何将oom中对应的blob字段设置为Byte[]类型,目前没找到方法, 只能通过脚本,将生成后的OOM ...

  8. (转载)VB 查询Oracle中blob类型字段,并且把blob中的图片以流的方式显示在Image上

    原文摘自:http://heisetoufa.iteye.com/blog/ '模块代码 Private Declare Function CreateStreamOnHGlobal Lib &quo ...

  9. 【JDBC核心】实现 CRUD 操作

    实现 CRUD 操作 操作和访问数据库 数据库连接被用于向数据库服务器发送命令和 SQL 语句,并接受数据库服务器返回的结果.其实一个数据库连接就是一个 Socket 连接. java.sql 包中有 ...

随机推荐

  1. 【JVM】类加载器与双亲委派

    类加载器,顾名思义,即是实现类加载的功能模块,负责将Class的字节码形式加载成内存形式的Class对象.字节码文件可来源于磁盘或者jar包中的Class文件,也可以来自网络字节流. 类加载器 在JV ...

  2. Unity发布WebGL改变鼠标样式

    记录:前段时间遇到一个需求,就是打包出来要在某种情况下鼠标的样子要改变成想要的样式. 详细代码如下 public Texture2D[] hand;//小指图标 /// <summary> ...

  3. [Python] 快速爬取当前城市所有租房网站房源及配置,一目了然

    Python爬取当前城市房源信息,以徐州为例代码效果图请看下方,其他部分请查看附件,一起学习,谢谢 # -*- coding: utf-8 -*- """ @Time : ...

  4. Sharding-JDBC分库分表简单示例

    1. 简介 Sharding是一个简单的分库分表中间件,它不需要依赖于其他的服务,即可快速应用在实际项目的分库分表策略中. 2. 初始化数据库(db0.db1.db2) 1 #创建数据库db0 2 C ...

  5. css 14-CSS3属性详解:Web字体

    14-CSS3属性详解:Web字体 #前言 开发人员可以为自已的网页指定特殊的字体(将指定字体提前下载到站点中),无需考虑用户电脑上是否安装了此特殊字体.从此,把特殊字体处理成图片的方式便成为了过去. ...

  6. PHPCMS V9.6.0 SQL注入漏洞分析

    0x01 此SQL注入漏洞与metinfo v6.2.0版本以下SQL盲注漏洞个人认为较为相似.且较为有趣,故在此分析并附上exp. 0x02 首先复现漏洞,环境为: PHP:5.4.45 + Apa ...

  7. bugku 之 crypto:进制转换的python脚本

    题目如下: text.txt的内容: 知识点:python怎么做进制转换 除了自己按照计算方法写一遍进制转换,可以用python自带的强制转换: int(a,num) 其中,int是转换成十进制整数类 ...

  8. 3.自定义view-TextView变色

    1.效果 2.实现原理 自定义Textview,重写onDraw方法,将画布分成两部分,用不同颜色的画笔画 核心代码: @Override protected void onDraw(Canvas c ...

  9. js对flv提取h264、aac音视频流

    FLV提取里面的h264视频流 FLV和MP4支持的编码 流媒体和媒体文件的区别 流媒体是指将一连串的多媒体资料压缩后,经过互联网分段发送资料,在互联网上即时传输影音以供观赏的一种技术与过程,此技术使 ...

  10. List集合转JSONObject

    以前写代码喜欢用Map拼接返回去给前端,这样得到的也是一个标准的JSON,今天先不说Map的优缺点,我们就来说说JSONObject的使用,我用的是阿里的fastjson,先上代码,当我们需要嵌套代码 ...