java代码如何实现存取数据库的blob字段

 更新时间:2025年04月22日 08:39:25   作者:火冠蜂鸟  
这篇文章主要介绍了java代码如何实现存取数据库的blob字段问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

一.业务

在业务中我们被要求将文件或图片等转成 byte[]InputStream存到数据库的Blob类型的字段中.

二.Blob类型介绍

在 MySQL 中,Blob 数据类型用于存储二进制数据。MySQL 提供了四种不同的 Blob 类型:

  • TINYBLOB: 最大存储长度为 255 个字节。
  • BLOB: 最大存储长度为 65,535 个字节。
  • MEDIUMBLOB: 最大存储长度为 16,777,215 个字节。
  • LONGBLOB: 最大存储长度为 4,294,967,295 个字节。

三. Blob 对应的 Java 类型

在 Java 中读取 MySQL Blob 类型时,通常使用 java.sql.Blob 类型。java.sql.Blob 是一个接口,它提供了一些方法来操作 Blob 数据。

根据 MySQL Blob 类型的不同,我们可以使用不同的 Java 类型来存储 Blob 数据。

  • TINYBLOB 对应 byte[]InputStream
  • BLOB 对应 byte[]InputStream
  • MEDIUMBLOB 对应 byte[]InputStream
  • LONGBLOB 对应 byte[]InputStream

我们可以根据需要选择合适的 Java 类型。推荐用InputStream,这样代码不用转换来转换去,比较简单

四.上存取java代码

1.建表

2.建实体类

@Data
public class TTT {
    private String id;
    private String name;
    private  String createTime;
    private byte[] miaoshuByte;
    private InputStream miaoshuInputstream;
}

3.用个自己写的工具类

public class FileUtil {
    /**
     * file转byte
     */
    public static byte[] file2byte(File file) throws IOException {
        FileInputStream fis = null;
        ByteArrayOutputStream bos = null;
        try {
            fis = new FileInputStream(file);
            bos = new ByteArrayOutputStream();
            IOUtils.copy(fis, bos);
            byte[] bytes = bos.toByteArray();
            return bytes;
        }finally {
            if (fis != null) {
                fis.close();
            }
            if (bos != null) {
                bos.close();
            }
        }
    }
 
    /**
     * byte 转file
     */
    public static File byte2File(byte[] buf,String fileName) throws IOException {
        FileOutputStream fos = null;
        try {
            fos = new FileOutputStream(fileName);
            fos.write(buf);
            File file = new File(fileName);
            return file;
        } finally {
            if (fos != null) {
                fos.close();
            }
        }
    }
} 

4.访问接口

@RestController
@RequestMapping("order/")
@Slf4j
public class SendHttpWController {
    @Autowired
    private UtimeeMapper utimeeMapper;

    @GetMapping("/aa")
    public String queryById( Integer id) throws IOException {
        TTT ttt = new TTT();
        ttt.setId("30");
        ttt.setName("张三");
        File file = new File("F:\\Desktop\\aa.docx");
        byte[] bytes = FileUtil.file2byte(file);
        ttt.setMiaoshuByte(bytes);
        FileInputStream fileInputStream = new FileInputStream(file);
        ttt.setMiaoshuInputstream(fileInputStream);
        utimeeMapper.insert01(ttt);
        return "嘿嘿额黑8082";
    }
    @GetMapping("/bb")
    public String bb( Integer id) throws IOException {
        TTT ttt = utimeeMapper.select01("30");
        byte[] bytes = ttt.getMiaoshuByte();
        FileUtil.byte2File(bytes,"F:\\Desktop\\cc.docx");
        InputStream inputStream = ttt.getMiaoshuInputstream();
        FileOutputStream outputStream = new FileOutputStream("F:\\Desktop\\dd.docx");
        IOUtils.copy(inputStream, outputStream);//记得添加关流代码(本代码省略了)
        return "嘿嘿额黑8082";
    }

5.输出成果

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 关于在IDEA中SpringBoot项目中activiti工作流的使用详解

    关于在IDEA中SpringBoot项目中activiti工作流的使用详解

    这篇文章主要介绍了关于在IDEA中SpringBoot项目中activiti工作流的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • mybatis-plus批量更新updateBatchById问题

    mybatis-plus批量更新updateBatchById问题

    这篇文章主要介绍了mybatis-plus批量更新updateBatchById问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • 在Java与Kotlin之间如何进行互操作详解

    在Java与Kotlin之间如何进行互操作详解

    这篇文章主要给大家介绍了关于在Java和Kotlin之间如何进行互操作的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-12-12
  • java日期格式化YYYY-MM-dd遇坑指南小结

    java日期格式化YYYY-MM-dd遇坑指南小结

    本文主要介绍了java日期格式化YYYY-MM-dd遇坑指南小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • 使用RedisAtomicLong优化性能问题

    使用RedisAtomicLong优化性能问题

    这篇文章主要介绍了使用RedisAtomicLong优化性能问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • Resttemplate中设置超时时长方式

    Resttemplate中设置超时时长方式

    这篇文章主要介绍了Resttemplate中设置超时时长方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • 深入分析Spring BeanDefinition的构造元信息

    深入分析Spring BeanDefinition的构造元信息

    Bean Definition是一个包含Bean元数据的对象,它描述了如何创建Bean实例、Bean属性的值以及Bean之间的依赖关系,本文将带大家深入分析Spring BeanDefinition的构造元信息,需要的朋友可以参考下
    2024-01-01
  • Java Stream 中的sorted 方法实现自定义排序全面解析(推荐)

    Java Stream 中的sorted 方法实现自定义排序全面解析(推荐)

    Java Stream API中的sorted()方法是一个强大的中间操作,它允许我们对流中的元素进行排序,本文将深入探讨如何使用sorted()方法实现自定义排序,涵盖各种常见场景和高级技巧,感兴趣的朋友一起看看吧
    2025-11-11
  • Java中将base64编码字符串转换为图片的代码

    Java中将base64编码字符串转换为图片的代码

    这篇文章主要介绍了Java中将base64编码字符串转换为图片,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-03-03
  • mybatis教程之动态sql语句_动力节点Java学院整理

    mybatis教程之动态sql语句_动力节点Java学院整理

    这篇文章主要介绍了mybatis教程之动态sql语句,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09

最新评论