文章目录

  • 操作BLOB类型字段
    • MySQL BLOB类型
    • 1.向数据表插入Blob类型的数据
    • 2.向数据表查询(读取)Blob类型的字段
    • 3.修改数据表中的Blob类型数据
    • 备注(代码附加)
操作BLOB类型字段
MySQL BLOB类型

Blob类型数据

PrepardeStatement操作Blob的数据,而Statement做不到

PrepardeStatement可以实现更高效的批量操作

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

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

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

  • 实际使用中根据需要存入的数据大小定义不同的BLOB类型。
  • 需要注意的是:如果存储的文件过大,数据库的性能会下降。
  • 如果在指定了相关的Blob类型以后,还报错:xxx too large,那么在mysql的安装目录下,找my.ini文件加上如下的配置参数: max_allowed_packet=16M。同时注意:修改了my.ini文件之后,需要重新启动mysql服务。
1.向数据表插入Blob类型的数据

这里的图片存放位置:

代码:使用PreparedStatement操作Blob类型的数据(这里是插入一张图片)

/*
使用PreparedStatement操作Blob类型的数据*/
package com.jsm5;import com.util.JDBCUtils;
import org.junit.Test;import java.io.File;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;public class BlobTest {//向数据表插入Blob类型的字段@Testpublic void test() throws Exception {Connection collections = JDBCUtils.getCollections();String sql="insert into customers(`name`,email,birth,photo)values(?,?,?,?)";PreparedStatement ps = collections.prepareStatement(sql);ps.setObject(1,"金士曼");ps.setObject(2,"1436589181@qq.com");ps.setObject(3,"1992-09-08");FileInputStream is = new FileInputStream(new File("1.png"));ps.setBlob(4,is);ps.execute();}
}

结果:

2.向数据表查询(读取)Blob类型的字段

(代码接上面,这里只放了单元测试)

 @Testpublic void test2() throws Exception{Connection conn = JDBCUtils.getCollections();String sql="select id,name,email,birth,photo from customers where id = ?";PreparedStatement ps = conn.prepareStatement(sql);ps.setInt(1,20);//上面的id对应的photo如果没有数据会报异常:NullPointerExceptionResultSet rs = ps.executeQuery();//写代码到关闭的时候才回来看的//声明流方便关闭流InputStream bs=null;FileOutputStream fos=null;if(rs.next()){int id = rs.getInt(1);String name = rs.getString(2);String email = rs.getString(3);Date birth = rs.getDate(4);//封装成一个对象Customer customer = new Customer(id, name, email, birth);//方式2:优点,不用根据sql语句的顺序,因为是根据列的别名去找的System.out.println(customer);//将Blob类型的字段下载下来以文件的方式保存在本地Blob photo = rs.getBlob("photo");bs = photo.getBinaryStream();fos = new FileOutputStream("2.jpg");
//            InputStream bs = photo.getBinaryStream();
//            FileOutputStream fos = new FileOutputStream("2.png");byte[] bytes = new byte[1024];int len;while ((len=bs.read())!=-1){fos.write(bytes,0,len);}}//资源的关闭bs.close();fos.close();JDBCUtils.closeResource(conn,ps,rs);}
3.修改数据表中的Blob类型数据

备注(修改和插入可以理解为相同的概念)

@Test
public void test3() throws Exception {Connection con = JDBCUtils.getCollections();String sql="UPDATE customers SET photo = ? WHERE id = ?";PreparedStatement ps = con.prepareStatement(sql);FileInputStream fis = new FileInputStream("1.jpg");ps.setBlob(1, fis);ps.setInt(2, 16);ps.execute();fis.close();ps.close();con.close();}
备注(代码附加)

JDBCUtils类

/**/
package com.util;import java.io.InputStream;
import java.sql.*;
import java.util.Properties;/*
操作数据库的工具类*/
public class JDBCUtils {/*获取数据库的连接*/public static Connection getCollections() throws Exception {//1.读取配置文件中的4个基本信息(通过类的加载器)InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("jdbc.properties");Properties p1 = new Properties();p1.load(is);String user = p1.getProperty("user");String password = p1.getProperty("password");String url = p1.getProperty("url");String driverClass = p1.getProperty("driverClass");//2.加载驱动Class.forName(driverClass);//3.获取连接Connection c3 = DriverManager.getConnection(url, user, password);return c3;}public static void closeResource(Connection connection, Statement ps){try {if(connection!=null)connection.close();} catch (SQLException e) {e.printStackTrace();}try {if (ps!=null)ps.close();} catch (SQLException e) {e.printStackTrace();}}//关闭资源的操作public static void closeResource(Connection connection, Statement ps, ResultSet resultSet){try {if(connection!=null)connection.close();} catch (SQLException e) {e.printStackTrace();}try {if (ps!=null)ps.close();} catch (SQLException e) {e.printStackTrace();}try {if(resultSet!=null)resultSet.close();} catch (SQLException e) {e.printStackTrace();}}
}e.printStackTrace();}try {if(resultSet!=null)resultSet.close();} catch (SQLException e) {e.printStackTrace();}}
}

JDBC-06:PrepardeStatement操作BLOB类型字段相关推荐

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

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

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

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

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

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

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

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

  5. 第25章 JDBC核心技术第4节:操作BLOB类型字段

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

  6. jdbc之操作BLOB类型字段

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

  7. JDBC:PreparedStatement 插入BLOB类型的数据,PreparedStatement 批量处理,Connection 事务处理

    JDBC:PreparedStatement 插入BLOB类型的数据,PreparedStatement 批量处理,Connection 事务处理 每博一文案 村上春树说: 你要做一个不动声色的大人了 ...

  8. 05-操作Blob类型字段

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

  9. mybatis更新Blob类型字段要用updateByPrimaryKeyWithBLOBs

    转载自  mybatis更新Blob类型字段要用updateByPrimaryKeyWithBLOBs 不会报错也不会更新desc  业务desc数据库类型为Blob  查看源码 解决方案:

  10. mysql 有empty_blob()_【原创】操作Blob类型的方法

    注:下列过程中的参数p_filename为外部文件名称,p_name用于标识唯一的一行 1.创建目录utl_dir用于文件的导入.导出 create or replace directory utl_ ...

最新文章

  1. 抗击疫情!阿里云为加速新药疫苗研发提供免费AI算力
  2. 人工智能落地之路:从概念验证到产品
  3. 树莓派共享文件至电脑(samba)
  4. Spring定时器--时间设置规则
  5. python 视频字幕替换_利用python调整srt字幕时间轴
  6. java两个和三个_Java语言基础(day_03)
  7. python爬取哔哩哔哩视频_Python实现视频爬取下载
  8. 体验VMware View HTML Access
  9. ROMMON下IOS的恢复
  10. androidstudio4.1.1 build model卡主_在C++中加载PyTorch1.4的FasterRCNN模型
  11. RS485使用串口输出最后一个字节固定为FF
  12. 关于EFM32下的w25q256的使用
  13. 学习 FPGA 经验与书籍
  14. P3369 【模板】普通平衡树 Treap树堆学习笔记
  15. OSChina 周二乱弹 ——你们终于找到属于自己的后宫了吧
  16. 某年的月初月末时间戳获取
  17. Pycharm环境下调用Qt desinger 常见问题以及解决方法
  18. 用c语言验证欧拉定理,欧拉定理_欧拉定理的意义
  19. 【历史上的今天】4 月 4 日:互联网新时代的缔造者出现;微软成立;苹果公司元老诞生
  20. 事业单位计算机专业能力测试考什么内容,事业单位职业能力测试考什么

热门文章

  1. 系统解剖学 | 心血管 | 动脉
  2. 微信营销是短暂的狂欢
  3. 利用Python简单实现环保212协议数据解码为字典结果【HJ212_2017协议的拆包解码】
  4. Flutter 使用插件本地arr问题
  5. vue 引用自定义eof、otf、在线字体的方法
  6. 微信小游戏开发视频教程《猴子吃香蕉》
  7. 零跑股价大幅度上涨,将会迎来全新的一面
  8. .Net 代码安全保护产品DNGuard HVM使用
  9. PB可以运行在linux,在Linux中运行Mac OS的pbcopy和pbpaste命令
  10. 文件系统的tell操作