这篇“Mysql存储二进制对象数据问题怎么解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Mysql存储二进制对象数据问题怎么解决”文章吧。
需要在数据库表中定义一个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中,BLOB是一个二进制大型对象,是一个可以存储大量数据的容器,它能容纳不同大小的数据。
BLOB类型实际是个类型系列(TinyBlob、Blob、MediumBlob、LongBlob),除了在存储的最大信息量上不同外,他们是等同的。
以上就是关于“Mysql存储二进制对象数据问题怎么解决”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注亿速云行业资讯频道。
亿速云「云数据库 MySQL」免部署即开即用,比自行安装部署数据库高出1倍以上的性能,双节点冗余防止单节点故障,数据自动定期备份随时恢复。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://blog.csdn.net/m0_37845840/article/details/82694081