将java对象保存到PostgreSQL
我想将我的java对象保存到postgresql列,我正在寻找一种简单的方法将java对象保存到PostgreSQL,java,sql,postgresql,serialization,jdbc,Java,Sql,Postgresql,Serialization,Jdbc,我想将我的java对象保存到postgresql列,我正在寻找一种简单的方法 存储对象的列的类型是什么 我听说了连载,但我有点迷路了。如何序列化/反序列化对象 没有特定的列类型。DB就像PostgreSQL不懂Java一样。序列化确实是一种方法。您需要做的就是让所讨论的类实现Serializable,如下所示: public YourClass implements Serializable { // ... } 然后您可以将其写入ObjectOutputStream并从ObjectI
没有特定的列类型。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?)映射到一个fullworthy表,其中每列表示对象的一个属性。例如
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)
)
这更清晰,更易于维护、重用和自动化。此链接非常简单,即不使用任何ByteArrayInputStream、ObjectOutputStream等类。你能告诉我这是否有问题吗?我遇到了这个答案,试图做类似的事情,似乎出于某种原因,我的编译器对:preparedStatement.setBinaryStream(bais);它无法解析该方法。我已经阅读了文档,看起来参数与规范一致,所以我不确定问题出在哪里。