做的项目中要用到日志功能,记录重要数据增删改,以提供后台动态数据恢复功能,在数据库中建立一个表四个字段:

id:标识(long)、action:增删改类别(String 或 int)、olddata与newdata分别记录增删改前后的数据类型为blob、optime记录操作时间

项目持久层用了Hibernate所以数据库中所有条目都是以JavaBean形式出现,JavaBean扩展了Serializable可以实现对象的序列化,现在问题就是怎样保存JavaBean序列化的结果到数据库,并且可以逆向反序列化为实例。

因为刚接触Java对列的概念不是很清楚,所以在序列化上遇到了问题,首先是如何不通过临时文件取得对象序列化的结果,网上的例子大多是对文件流的操作,用来保存图片

综合网上的多个例子以及从JDK中查询的结果,总结出以下过程:

1、还是对流的操作,不过不是文件流而是字节流,利用ByteArrayOutputStream创建

2、通过new出来ByteArrayOutputStream作为参数创建ObjectOutputStream

3、调用ObjectOutputStream的writeObject将任意JavaBean序列化为字节流

//以上是序列化过程,实际上使用不同的XStream就可以把JavaBean序列化到不同的流中

4、通过调用ByteArrayOutputStream的toByteArray可以获得byte数组

//这是取中间值,相当于文件流操作时利用文件名打开一个文件流,文件名也是一个中间值

5、将得到的byte数组作为参数用ByteArrayInputStream打开一个输入流

6、调用静态方法Hibernate.createBlob(),以输入流为参数获取Blob

7、此后可将该Blob设置为接收Bean的属性保存到数据库中

//以上完成将序列化的结果存储到数据库

8、利用Hibernate的API的到数据库中的Blob很容易,然后调用Blob的getBinaryStream可获取输入流,将此流作为ObjectInputStream,调用readObject可得到序列化前的实例

代码:

//序列化

ByteArrayOutputStream bos=new ByteArrayOutputStream();

ObjectOutputStream oos=new ObjectOutputStream(bos);

oos.writeObject(new User("cfgxy"));

//保存到数据库,sessionFactory是Hibernate中SessionFactory的一个实例

Session session=sessionFactory.createSession();

Transaction tx =session.openTransaction();

ByteArrayInputStream bis=new ByteArrayInputStream(bos.getByteArray());

session.save(new Logs(null,"INSERT",null,Hibernate.createBlob(bis)));

tx.commit();

session.close();

//从数据库读取,假设传来的参数id为数据库主键的值

Session session=sessionFactory.createSession();

Logs log=(Logs)session.load(Logs.class,id);

ObjectInputStream ois=new ObjectInputStream(log.getNewData().getBinaryStream());

return (User)ois.readObject();

//代码中均未对异常进行捕捉,实际运用中要捕捉异常

文章来源:http://x-spirit.spaces.live.com/Blog/cns!CC0B04AE126337C0!818.entry

序列化数据导入mysql_[导入]对象序列化后保存到数据库相关推荐

  1. Java调用接口获取json数据解析后保存到数据库

    文章目录 1.在yml文件中配置自己定义的接口URL 2.在Controller中添加请求方法和路径 3.在Service中添加方法 4.在ServiceImpl中实现方法 今天给大家带来一个调用接口 ...

  2. php序列化数据无法反解析,PHP-反序列化数据不起作用

    过去5个小时一直在这里工作,我很困惑.尝试了最荒谬的功能来尝试对其进行修复,但无济于事. 我正在从WP数据库中检索数据.在插入数据之前,已使用PHP的serialize()函数对1个数组进行了序列化. ...

  3. dta导入mysql_使用dta 实用工具优化数据库

    dta 实用工具提供了一个命令提示符可执行文件,可以用来优化数据库.该实用工具使您能够在批处理文件和脚本中使用数据库引擎优化顾问的功能.dta 实用工具使用跟踪文件.跟踪表和 Transact-SQL ...

  4. SpringBoot 05 集成redis实现对象序列化缓存

    1.为什么用Spring Data Spring Data 的目标是为数据访问提供一个基于Spring的普遍常用的编程模型,同时仍然保留底层数据存储的特殊特性, 它让使用数据访问技术.关系和非关系数据 ...

  5. 对象序列化 BinaryFormatter、XmlSerializer、SoapFormatter

    序列化:持久化(可能还包括传输)一个对象的状态到流(如文件流和内存流)的过程.用最小花费来保存海量的(各种格式的)数据就变的轻而易举.序列化是用来通信的,服务端把数据序列化,发送到客户端,客户端把接收 ...

  6. Java对象序列化详解6,Java对象的序列化与反序列化详解

    把对象转换为字节序列的过程称为对象的序列化,把字节序列恢复为对象的过程称为对象的反序列化. 对象的序列化主要有两种途径: Ⅰ . 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中 Ⅱ.  在网 ...

  7. Java19-day10【标准输入输出流、字节字符打印流、对象序列化-反序列化流、serialVersionUIDtransient、Properties】

    视频+资料[链接:https://pan.baidu.com/s/1MdFNUADVSFf-lVw3SJRvtg   提取码:zjxs] Java基础--学习笔记(零起点打开java世界的大门)--博 ...

  8. java byte序列化,java对象序列化byte[] and byte[]反序列化对象--转

    import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOExceptio ...

  9. Java对象序列化与反序列化

    什么是序列化与反序列化 当两个进程在进行远程通信时,彼此可以发送各种类型的数据.无论是何种类型的数据,都会以二进制序列的形式在网络上传送.发送方需要把这个Java对象转换为字节序列,才能在网络上传送: ...

最新文章

  1. 继承的综合运用《Point类派生出Circle类而且进行各种操作》
  2. linux 2.6.35 arm map_lowmem,第一次玩arm和linux,9261移植2.6.39无法挂载jiffys2文件系统,谁能指点一下...
  3. [Spring cloud 一步步实现广告系统] 22. 广告系统回顾总结
  4. asp.net html table,在ASP.NET中利用HtmlTable动态创建表格 | 学步园
  5. C# 依据鼠标坐标取网页内成员坐标.ie
  6. java 类调用情况_java 如何调用类?情况如下
  7. 【C#】【引用加原创】C#实现kalman滤波
  8. mysql identity 获取_如何获取MySQL中Identity列的种子值?
  9. Float Protocol将于5月7日至10日进行FLOAT代币创世发布
  10. c++界面设计皮肤工具
  11. 520这个日子就应该用程序员最浪漫的表白方式
  12. 联想U310刷白名单更换无线网卡纪实
  13. 硅谷创业天堂的启示!
  14. 强化学习代码实操和讲解(一)
  15. 0640与6130的区别_达人评测熊猫6143收音机与6130有区别没有?使用哪个好?使用四周后体验分享...
  16. C语言:优先级与运算符的介绍
  17. allegro放置器件无法放_Allegro怎么放置后台元器件?
  18. python dingding --- 钉钉机器人API
  19. 大数据平台安装实验: ZooKeeper、Kafka、Hadoop、Hbase、Hive、Scala、Spark、Storm
  20. re模块findall函数用法

热门文章

  1. 构建 Vue.js 2.0项目
  2. MySQL 两个死锁样例
  3. 使用Jupter Notebook实现简单的神经网络
  4. UWP 颜色选择器(ColorPicker) 和 自定义的Flyout(AdvancedFlyout)
  5. 架构之旅~底层提供一个统一的GetModel()的重要性
  6. Maven自动压缩脚本 和 样式文件配置
  7. MakeGenericMethod Reflection 反射 ObjectToXmlT Generic XmlSerializer
  8. Cisco基本必须掌握命令
  9. android 9.0打开wifi,Android9.0 SystemUI 屏蔽打开wifi时不显示4G图标的逻辑
  10. java 元祖_在java中对元组列表进行排序的有效方法