将java对象保存到PostgreSQL

Moo*_*ooh 3 java sql postgresql serialization jdbc

我想将我的java对象保存到postgresql列,我正在寻找一种简单的方法.

  1. 列存储对象的类型是什么?
  2. 我听说过序列化,但我有点迷茫.我如何序列化/反序列化对象?

Bal*_*usC 6

没有特定的列类型.DB就像PostgreSQL一样不懂Java.序列化确实是其中一种方式.您需要做的就是让有问题的Serializable类这样实现:

public YourClass implements Serializable {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

然后你就可以把它写成一个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);
    // ...
Run Code Online (Sandbox Code Playgroud)

不用说,这不是最好的做法.而是将您的对象(javabean?)映射到一个完整的表,其中每列代表对象的属性.例如

public class Person {
    private Long id;
    private String firstname;
    private String lastname;
    private Integer age;
    // ...
}
Run Code Online (Sandbox Code Playgroud)

然后根据这样的表映射:

CREATE TABLE Person (
    id SERIAL PRIMARY KEY,
    firstname VARCHAR(255),
    lastname VARCHAR(255),
    age NUMERIC(3)
)
Run Code Online (Sandbox Code Playgroud)

这更清晰,更易于维护,可重复使用和自动化.