Mysql存储二进制对象数据问题

 更新时间:2023年03月14日 16:32:45   作者:码农的诞生  
这篇文章主要介绍了Mysql存储二进制对象数据问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

Mysql存储二进制对象数据

首先数据库存储一个Object对象

需要在数据库表中定义一个blob类型的字段

与数据库对应的实体类

编写一个操作二进制的工具类

import java.io.*;
 
/**
 * byte[]类型操作类
 */
public class BlobUtil {
 
    /**
     * 把object对象序列化为二进制字节数组
     * @param object
     * @return
     */
    public static byte[] setObject(Object object) {
        ByteArrayOutputStream baos = null;
        ObjectOutputStream out = null;
        try {
            baos = new ByteArrayOutputStream();
            out = new ObjectOutputStream(baos);
            out.writeObject(object);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (out != null) {
                try {
                    out.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (baos != null) {
                try {
                    baos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return baos.toByteArray();
    }
 
    /**
     * 把二进制字节数组反序列化为object对象
     * object当中的每个javaBean对象都必须实现序列化
	 * 最外层的类必须生成一个序列化ID
     * @param bytes
     * @return
     */
    public static Object getObject(byte[] bytes) {
        Object obj = null;
        ByteArrayInputStream bais = null;
        ObjectInputStream in = null;
        try {
            bais = new ByteArrayInputStream(bytes);
            in = new ObjectInputStream(bais);
            obj = in.readObject();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (in != null) {
                try {
                    in.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (bais != null) {
                try {
                    bais.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return obj;
    }
}

需要转换为byte[]的对象必须实现序列化和生成一个序列化ID,生成一个序列化ID是为了解决类当中一但有修改,反序列化时序列化ID就会对应不上,如下图:

类中如果有其他类为变量也需要实现序列化,否则从数据库中取出数据然后反序列化成Object对象的时候会直接报错

对user的数据进行操作

import java.io.Serializable;
 
/**
 * @author
 * @description
 * @date
 */
public class UserVO implements Serializable {
 
    private static final long serialVersionUID = 1L;
 
    private String userId;
 
    private String userName;
 
    private String password;
 
    public String getUserId() {
        return userId;
    }
 
    public void setUserId(String userId) {
        this.userId = userId;
    }
 
    public String getUserName() {
        return userName;
    }
 
    public void setUserName(String userName) {
        this.userName = userName;
    }
 
    public String getPassword() {
        return password;
    }
 
    public void setPassword(String password) {
        this.password = password;
    }
}

调用二进制工具类来转换数据然后进行存取就可以了。

测试功能

public class TestMain {
 
    public static void main(String[] args) {
        UserVO user = new UserVO();
        user.setUserId("123456");
        user.setUserName("张三");
        byte[] dataValue = BlobUtil.setObject(user);
        System.out.println("=====对象转换成blob类型数据====="+Arrays.toString(dataValue));
        UserVO userVO = (UserVO) BlobUtil.getObject(dataValue);
        System.out.println("=====blob类型数据转换成对象====="+ JSONObject.toJSONString(userVO));
    }
}

打印输出

=====对象转换成blob类型数据=====[-84, -19, 0, 5, 115, 114, 0, 53, 99, 111, 109, 46, 100, 111, 108, 112, 104, 105, 110, 46, 109, 111, 100, 117, 108, 101, 115, 46, 116, 109, 115, 46, 100, 111, 109, 97, 105, 110, 46, 99, 117, 115, 116, 111, 109, 101, 114, 115, 101, 114, 118, 105, 99, 101, 46, 85, 115, 101, 114, 86, 79, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 3, 76, 0, 8, 112, 97, 115, 115, 119, 111, 114, 100, 116, 0, 18, 76, 106, 97, 118, 97, 47, 108, 97, 110, 103, 47, 83, 116, 114, 105, 110, 103, 59, 76, 0, 6, 117, 115, 101, 114, 73, 100, 113, 0, 126, 0, 1, 76, 0, 8, 117, 115, 101, 114, 78, 97, 109, 101, 113, 0, 126, 0, 1, 120, 112, 112, 116, 0, 6, 49, 50, 51, 52, 53, 54, 116, 0, 6, -27, -68, -96, -28, -72, -119]
=====blob类型数据转换成对象====={"userId":"123456","userName":"张三"}

Mysql存储二进制大型对象类型对照

MySql MediumBlob——MySql的Bolb四种类型

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

BLOB类型实际是个类型系列(TinyBlob、Blob、MediumBlob、LongBlob),除了在存储的最大信息量上不同外,他们是等同的。

在这里插入图片描述

总结

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

相关文章

  • MySQL表分区的几种实现

    MySQL表分区的几种实现

    本文主要介绍了MySQL表分区的几种实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • MySQL中Binlog日志的使用方法详细介绍

    MySQL中Binlog日志的使用方法详细介绍

    MySQL的binlog(二进制日志)是一种记录MySQL服务器所有更改的二进制日志文件,下面这篇文章主要给大家介绍了关于MySQL中Binlog日志的使用方法,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-02-02
  • MySQL出现Waiting for table metadata lock的原因方法

    MySQL出现Waiting for table metadata lock的原因方法

    在本篇内容里小编给大家整理了MySQL出现Waiting for table metadata lock的原因以及解决方法对此有需要的朋友们学习下。
    2019-05-05
  • Oracle与MySQL的区别及优缺点

    Oracle与MySQL的区别及优缺点

    这篇文章主要介绍了Oracle与MySQL的区别及优缺点,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参加一下
    2022-08-08
  • Win下Mysql5.6升级到5.7的方法

    Win下Mysql5.6升级到5.7的方法

    MySQL的升级方式分为两种:原地升级和逻辑升级。这两种升级方式,本质没有什么区别的,下面通过本文给大家详细介绍Win下Mysql5.6升级到5.7的方法,需要的的朋友参考下
    2017-04-04
  • MySQL Binlog日志写入及文件操作

    MySQL Binlog日志写入及文件操作

    这篇文章主要为大家介绍了MySQL Binlog日志写入及文件操作详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • mysql 5.7.17 安装教程 附MySQL服务无法启动的解决方法

    mysql 5.7.17 安装教程 附MySQL服务无法启动的解决方法

    这篇文章主要为大家详细介绍了mysql 5.7.17安装教程,并且为大家分享了MySQL服务无法启动的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • 解决MySQL 8.0以上版本设置大小写不敏感的问题

    解决MySQL 8.0以上版本设置大小写不敏感的问题

    MySQL 8.0以上版本默认区分大小写,但在低版本(如5.7)中,可以通过在my.cnf配置文件的[mysqld]节下添加lower_case_table_names=1来设置大小写不敏感,本篇博客将介绍如何解决MySQL 8.0以上版本设置大小写不敏感的问题,需要的朋友可以参考下
    2023-11-11
  • 利用MySQL加密函数保护Web网站敏感数据的方法分享

    利用MySQL加密函数保护Web网站敏感数据的方法分享

    如果您正在运行使用MySQL的Web应用程序,那么它把密码或者其他敏感信息保存在应用程序里的机会就很大
    2012-03-03
  • Mysql怎么存储json格式数据详解

    Mysql怎么存储json格式数据详解

    在开发中遇到存取html值的情况,并且要根据id进行实时返回,在做的时候想到了mysql的json类型存储,下面这篇文章主要给大家介绍了关于Mysql怎么存储json格式数据的相关资料,需要的朋友可以参考下
    2022-06-06

最新评论