【发布时间】:2013-08-19 20:16:58
【问题描述】:
我知道序列化是什么,但是我还没有找到任何描述后者的实际示例(利用 JAVA_OBJECT 映射将对象保存在数据库中)。 我是否必须先序列化对象然后将其保存到数据库中?
【问题讨论】:
-
感谢投票者的反馈,但请随时表达你为什么保留这样。
我知道序列化是什么,但是我还没有找到任何描述后者的实际示例(利用 JAVA_OBJECT 映射将对象保存在数据库中)。 我是否必须先序列化对象然后将其保存到数据库中?
【问题讨论】:
序列化用于保存对象的状态并将其编组到流中并与远程进程共享。其他进程只需要具有相同的类版本即可将流反序列化回对象。
数据库方法的问题是您甚至需要将数据库公开给远程进程。由于各种原因,主要是安全性,通常不会这样做。
【讨论】:
在 MySQL 的情况下,您不必先序列化对象,驱动程序会为您完成。只需使用PreparedStatement.setObject 方法即可。
例如,首先在 MySQL 中创建表:
create table blobs (b blob);
然后在Java程序中创建一个prepared statement,设置参数,然后执行:
PreparedStatement preps;
preps = connection.prepareStatement("insert into blobs (b) values (?)");
preps.setObject(1, new CustomObject());
preps.execute();
别忘了你要存储的对象的类必须实现Serializable接口。
【讨论】:
Types.JAVA_OBJECT 值。