我想将我的java对象保存到postgresql列,我正在寻找一种简单的方法。
答案 0 :(得分:6)
没有特定的列类型。 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?)映射到一个完整的表,其中每列代表对象的属性。 E.g。
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)
)
更清晰,更易于维护,可重复使用和自动化。