Нет определенного типа столбца. БД, как 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)
)
Это гораздо понятнее и удобнее в обслуживании, многоразовом использовании и автоматизации.