java - 将 java 对象保存到 PostgreSQL

标签 java sql postgresql serialization jdbc

我想将我的 java 对象保存到 postgresql 列中,我正在寻找一种简单的方法来做到这一点。

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

最佳答案

没有特定的列类型。 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?)映射到一个完整的表,其中每一列代表对象的一个​​属性。例如

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)
)

这更清晰、更易于维护、可重用和自动化。

关于java - 将 java 对象保存到 PostgreSQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4295308/

相关文章:

java - setText中 `"“+`的用途是什么

java - 使用 Netbeans 在本地 Java 服务器上进行开发

sql - 从 SQL Server 中的字符串中提取子字符串

sql - 无法使用 monotouch 连接到 sql azure 数据库

ruby-on-rails - RoR PostgresQL - 从数据库中获取最新的不同值

sql - 当时间戳开始时间大于时间戳结束时间时查询失败

java - 结构值存储

java - SCJP6 正则表达式问题

MySQL合并多个表的列

postgresql - SUM OVER PARTITION ON 日期范围