Сохранение Java-объекта в PostgreSQL - PullRequest
3 голосов
/ 28 ноября 2010

Я хочу сохранить свой объект Java в столбце postgresql, и я ищу простой способ сделать это.

  1. какой тип для столбцов хранит объекты?
  2. Я слышал о сериализации, но я немного потерян. Как я могу сериализовать / десериализовать объект?

1 Ответ

6 голосов
/ 28 ноября 2010

Нет определенного типа столбца. БД, как 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)
)

Это гораздо понятнее и удобнее в обслуживании, многоразовом использовании и автоматизации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...