我希望将我的Java对象保存到PostgreSQL列中,我正在寻找一种简单的方法来实现。
- 哪种列类型可以存储对象?
- 我听说过序列化,但我有点迷茫。如何对对象进行序列化/反序列化?
我希望将我的Java对象保存到PostgreSQL列中,我正在寻找一种简单的方法来实现。
没有特定的列类型。像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)
)
这样做更加清晰,易于维护、重用和自动化。
preparedStatement.setBinaryStream(bais);
它无法解析该方法。我已经阅读了文档,发现参数与规范相符,所以我不确定问题出在哪里。 - Rome_Leader