【发布时间】:2010-11-28 04:08:38
【问题描述】:
我想将我的 java 对象保存到 postgresql 列,我正在寻找一种简单的方法来做到这一点。
- 什么类型的列存储对象?
- 我听说过序列化,但我有点迷路了。如何序列化/反序列化对象?
【问题讨论】:
标签: java sql postgresql serialization jdbc
我想将我的 java 对象保存到 postgresql 列,我正在寻找一种简单的方法来做到这一点。
【问题讨论】:
标签: java sql postgresql serialization jdbc
没有特定的列类型。 DB之类的PostgreSQL不理解Java。序列化确实是其中一种方式。您需要做的就是让相关类实现Serializable,如下所示:
public YourClass implements Serializable {
// ...
}
然后您就可以将其写入ObjectOutputStream 并从ObjectInputStream 读取。然后,您可以使用 PreparedStatement#setBinaryStream() 将其持久化到二进制列。在 PostgreSQL 中,这是 bytea 类型。
YourClass instance = getItSomehow();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(instance);
oos.close();
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
Connection connection = null;
PreparedStatement preparedStatement = null;
try {
connection = database.getConnection();
preparedStatement = connection.prepareStatement(SOME_SQL);
preparedStatement.setBinaryStream(bais);
// ...
不用说,这不是最佳做法。而是将您的对象(javabean?)映射到一个完整的表,其中每一列代表对象的一个属性。例如
public class Person {
private Long id;
private String firstname;
private String lastname;
private Integer age;
// ...
}
然后将其映射到这样的表:
CREATE TABLE Person (
id SERIAL PRIMARY KEY,
firstname VARCHAR(255),
lastname VARCHAR(255),
age NUMERIC(3)
)
这更清晰,更易于维护、可重用和自动化。
【讨论】: