Mysql存储二进制对象数据问题怎么解决

免费教程   2024年05月10日 16:01  

这篇“Mysql存储二进制对象数据问题怎么解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Mysql存储二进制对象数据问题怎么解决”文章吧。

Mysql存储二进制对象数据首先数据库存储一个Object对象

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

与数据库对应的实体类编写一个操作二进制的工具类importjava.io.*;/***byte[]类型操作类*/publicclassBlobUtil{/***把object对象序列化为二进制字节数组*@paramobject*@return*/publicstaticbyte[]setObject(Objectobject){ByteArrayOutputStreambaos=null;ObjectOutputStreamout=null;try{baos=newByteArrayOutputStream();out=newObjectOutputStream(baos);out.writeObject(object);}catch(Exceptione){e.printStackTrace();}finally{if(out!=null){try{out.close();}catch(IOExceptione){e.printStackTrace();}}if(baos!=null){try{baos.close();}catch(IOExceptione){e.printStackTrace();}}}returnbaos.toByteArray();}/***把二进制字节数组反序列化为object对象*object当中的每个javaBean对象都必须实现序列化*最外层的类必须生成一个序列化ID*@parambytes*@return*/publicstaticObjectgetObject(byte[]bytes){Objectobj=null;ByteArrayInputStreambais=null;ObjectInputStreamin=null;try{bais=newByteArrayInputStream(bytes);in=newObjectInputStream(bais);obj=in.readObject();}catch(Exceptione){e.printStackTrace();}finally{if(in!=null){try{in.close();}catch(IOExceptione){e.printStackTrace();}}if(bais!=null){try{bais.close();}catch(IOExceptione){e.printStackTrace();}}}returnobj;}}

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

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

对user的数据进行操作

importjava.io.Serializable;/***@author*@description*@date*/publicclassUserVOimplementsSerializable{privatestaticfinallongserialVersionUID=1L;privateStringuserId;privateStringuserName;privateStringpassword;publicStringgetUserId(){returnuserId;}publicvoidsetUserId(StringuserId){this.userId=userId;}publicStringgetUserName(){returnuserName;}publicvoidsetUserName(StringuserName){this.userName=userName;}publicStringgetPassword(){returnpassword;}publicvoidsetPassword(Stringpassword){this.password=password;}}

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

测试功能

publicclassTestMain{publicstaticvoidmain(String[]args){UserVOuser=newUserVO();user.setUserId("123456");user.setUserName("张三");byte[]dataValue=BlobUtil.setObject(user);System.out.println("=====对象转换成blob类型数据====="+Arrays.toString(dataValue));UserVOuserVO=(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存储二进制对象数据问题怎么解决”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注行业资讯频道。

域名注册
购买VPS主机

您或许对下面这些文章有兴趣:                    本月吐槽辛苦排行榜

看贴要回贴有N种理由!看帖不回贴的后果你懂得的!


评论内容 (*必填):
(Ctrl + Enter提交)   

部落快速搜索栏

各类专题梳理

网站导航栏

X
返回顶部