目录

1.Blob介绍

2.使用PreparedStatement向数据表中插入Blob类型字段

3.从数据表中读取Blob类型数据

4.特殊情况说明


1.Blob介绍

Blob是一种二进制数据文件,分为TinyBlob,Blob,MediumBlob,LongBlob四种类型。每种类型之间的差距是存储的内容大小不同。需要注意的是,向数据库中插入大量的Blob数据会导致性能下降。

2.使用PreparedStatement向数据表中插入Blob类型字段

步骤

①获取连接。

②编写SQL语句。

③预编译SQL语句。

④填充占位符。(在填写Blob类型数据时,使用setBlob(int index,InputStream in)来填写)

⑤执行SQL语句。

示例:创建数据表,具有两个字段分别是name和photo,向其中插入name=“小张”和添加照片。

package lib;import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Properties;public class Test1 {public static void main(String[] args) {InputStream is=null;Connection connection=null;InputStream iStream=null;try {//加载配置文件is=Test1.class.getClassLoader().getResourceAsStream("test.properties");Properties properties=new Properties();properties.load(is);String user=properties.getProperty("user");String password=properties.getProperty("password");String url=properties.getProperty("url");String driver=properties.getProperty("driver");//加载驱动Class.forName(driver);//获取连接connection=DriverManager.getConnection(url, user, password);//删除旧表String sql="drop table test";PreparedStatement ps=connection.prepareStatement(sql);ps.execute();//创建新表sql="create table test (`name` varchar(10),photo Blob default null)";ps=connection.prepareStatement(sql);ps.execute();//插入数据sql="update test set photo=? where `name`=?";ps=connection.prepareStatement(sql);//使用setBlob()插入图片数据iStream=new FileInputStream("头像.jpeg");ps.setBlob(1, iStream);ps.setObject(2, "小张");ps.execute();}  catch (Exception e) {e.printStackTrace();}finally {//关闭资源try {is.close();} catch (IOException e) {e.printStackTrace();}try {connection.close();} catch (SQLException e) {e.printStackTrace();}try {iStream.close();} catch (IOException e) {e.printStackTrace();}}}
}

3.从数据表中读取Blob类型数据

步骤

①获取连接。

②编写SQL语句。

③预编译SQL语句,获取ResultSet对象。

④获取数据。(对于Blob类型数据,使用getBlob()方法获取一个Blob对象)。

⑤调用Blob对象的getBinaryStream()方法获取一个输入流。

⑥使用输出流将数据进行保存。

示例:将上面添加的小张数据的头像保存到桌面。

package lib;import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;import com.mysql.cj.jdbc.Blob;public class Test1 {public static void main(String[] args) {InputStream is=null;Connection connection=null;FileOutputStream os=null;ResultSet rs=null;try {//加载配置文件is=Test1.class.getClassLoader().getResourceAsStream("test.properties");Properties properties=new Properties();properties.load(is);String user=properties.getProperty("user");String password=properties.getProperty("password");String url=properties.getProperty("url");String driver=properties.getProperty("driver");//加载驱动Class.forName(driver);//获取连接connection=DriverManager.getConnection(url, user, password);//获取数据String sql="select photo from test where `name`=?";PreparedStatement ps=connection.prepareStatement(sql);ps.setObject(1, "小张");rs=ps.executeQuery();if(rs.next()) {Blob blob=(Blob) rs.getBlob(1);//获取Blob对象的输入流is=blob.getBinaryStream();//创建指向桌面文件的流os=new FileOutputStream("C:\\Users\\13329\\Desktop\\头像.jpeg");//输出到桌面byte []data=new byte[1024];int len;int i=0;while((len=is.read(data))!=-1) {i++;os.write(data, 0, len);}}}  catch (Exception e) {e.printStackTrace();}finally {//关闭资源try {is.close();} catch (IOException e) {e.printStackTrace();}try {connection.close();} catch (SQLException e) {e.printStackTrace();}try {os.close();} catch (IOException e) {e.printStackTrace();}}}
}

4.特殊情况说明

插入指定的Blob类型数据后,可能会出现xxx too large的错误,此时需要在MySQL的安装目录下找到my.ini文件,加上如下配置参数:max_allowed_packet=16M。并且在修改后重启MySQL服务。(如果修改了还不能添加成功,请查看你插入的数据大小是否超过了你指定的数据类型的最大存储范围。)

JDBC向数据库中插入BLOB类型数据相关推荐

  1. java向Oracle数据库中插入blob字段数据

    java不能直接想插入其他普通类型数据一样插入blob字段数据,因为blob相当于一个大文件块,里面有游标,需要初始化blob游标才能插入数据.所以我们要先插入一个空的blob数据,以初始化游标,然后 ...

  2. Java如何给Mysql中插入year类型数据

    文章目录 Java如何给Mysql中插入year类型数据 实际问题: 解决方案: 从数据库中读取year类型数据到Java 从Java中往数据库存储year数据 Java如何给Mysql中插入year ...

  3. mysql十万条数据_2秒内向数据库中插入十万条数据?

    怎么向数据库中快速插入十万条数据呢,当然得需要对比才能看到效果,今天给大家亲身测了两种方法对比,差别25倍左右 1,数据库用sql server 2008 r2,表结构非常简单,四个字段,建数据表的s ...

  4. Oracle数据库中插入日期型数据

    如果插入Oracle的当前系统时间可以用 SYSDATE INSERT INTO FLOOR VALUES ( SYSDATE ) ; 往Oracle数据库中插入日期型数据(to_date的用法) 今 ...

  5. 深入探讨JDBC往MySQL中插入Timestamp类型字段报错问题

    背景描述 最近处于工作需要,用到了Apache的commons dbutils包来操作数据库.在保存数据到MySQL数据库时,报了一个空指针异常,作为开发多年的Java老鸟,最不怕的就是空指针异常,于 ...

  6. Java程序向MySql数据库中插入的中文数据变成了问号

    找到mysql的安装目录,修改my.ini文件 (1)如何找到my.ini文件 如果my.ini文件不在MySQL的安装目录下,可能放在隐藏目录,要先去找到ProgramData,(这里要先打开显示隐 ...

  7. Java 对Oracle数据库中的 BLOB类型 插入图片

    2019独角兽企业重金招聘Python工程师标准>>> package test;import java.io.BufferedInputStream; import java.io ...

  8. 用python读取pg数据库中的blob类型图片数据,转换存成jpg格式存到本地文件夹

    先啰嗦一下,热热身 在工作中,我们常见到数据库中的数据类型主要为char,varchar,text等,但是有时我们也会用blob格式来存储语音文件或者图像文件,在网上找了很多,都没找到合适的办法,只好 ...

  9. JDBC基础学习(三)—处理BLOB类型数据

    一.BLOB类型介绍 在MySQL中,BLOB是一个二进制的大型对象,可以存储大量数据的容器,它能容纳不同大小的数据. 在MySQL中有四种BLOB类型. 实际使用中根据需要存入的数据大小定义不同的B ...

最新文章

  1. 使用swagger作为restful api的doc文档生成——从源码中去提取restful URL接口描述文档...
  2. 线性代数知识汇总(转载)
  3. P3369-[模板]普通平衡树【替罪羊树】
  4. [转]迭代、集合、字典表和列表
  5. 我的缺点,(不断补充中...)
  6. UCenter Home 1.5的基本配置与技巧
  7. Sinevibes Plugins Bundle for Mac(Sinevibes合成器合集)
  8. 各种常用STL容器选择 需求分析笔记
  9. 【计算技巧】分数复数的共轭--分数复数模的平方计算技巧
  10. ❤️肝下25万字的《决战Linux到精通》笔记,你的Linux水平将从入门到入魔❤️【建议收藏】
  11. My Eighty-first Page - 打家劫舍 - By Nicolas
  12. [学习]JavaScript设计模式——Revealing Module(揭示模块)模式
  13. 【iOS】—— weak的基本原理
  14. Tensorflow中的数据对象Dataset.shuffle()、repeat()、batch() 等用法
  15. marker 上的气泡 callout的使用
  16. RNA保护液、FastAb佐剂、核酸提取试剂盒丨为您的实验锦上添花
  17. flash传值php乱码,Flash中出现中文乱码的解决办法,网页模板帮助中心
  18. 中国帆船行业现状分析及发展前景展望报告2022-2028年
  19. 小程序微信支付功能开发
  20. 网站降权根服务器有关系吗,导致网站降权或被k的原因有哪些?

热门文章

  1. absolute和relative定位总结(水平居中和垂直居中)
  2. 印度万亿光伏市场解析
  3. 32位和64位系统的区别
  4. 如何解决dell g15 5511 dp转雷电接口 连接不上 gtc vive pro2 的问题
  5. windows系统重装(安装)第四篇--重装之后的系统优化及网卡无驱动(大红叉)解决方案
  6. Windows+Ubuntu双系统修改默认开机系统
  7. 一根绳子从一头烧需30时分钟_大闸蟹 |买绳子还是买螃蟹?捆绳贵过螃蟹、一根32块,大闸蟹背后的捆绳“生意经”...
  8. 砸10亿元!苏宁易购公布“以旧换新”实行办法
  9. SAP中批量更改会计凭证文本处理实例
  10. 二级mysql 常用客户瑞答案_MySQL客户端软件常用的主要有:_学小易找答案