2010-11-28 117 views
2

我想將我的java對象保存到postgresql列中,並且正在尋找一種簡單的方法。將Java對象保存到PostgreSQL

  1. 列存儲對象的類型是什麼?
  2. 我聽說過系列化,但我有點失落。我如何序列化/反序列化對象?

回答

5

沒有特定的列類型。 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) 
) 

這是更清晰,更好的可維護性,可重複使用和自動化。

+0

這個鏈接,http://www.java2s.com/Code/Java/Database-SQL-JDBC/HowtoserializedeserializeaJavaobjecttotheMySQLdatabase.htm已經很容易了,那就是不使用任何ByteArrayInputStream,ObjectOutputStream等類。你能告訴我是否有問題嗎? – 2016-05-14 15:15:14