2
我想將我的java對象保存到postgresql列中,並且正在尋找一種簡單的方法。將Java對象保存到PostgreSQL
- 列存儲對象的類型是什麼?
- 我聽說過系列化,但我有點失落。我如何序列化/反序列化對象?
我想將我的java對象保存到postgresql列中,並且正在尋找一種簡單的方法。將Java對象保存到PostgreSQL
沒有特定的列類型。 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)
)
這是更清晰,更好的可維護性,可重複使用和自動化。
這個鏈接,http://www.java2s.com/Code/Java/Database-SQL-JDBC/HowtoserializedeserializeaJavaobjecttotheMySQLdatabase.htm已經很容易了,那就是不使用任何ByteArrayInputStream,ObjectOutputStream等類。你能告訴我是否有問題嗎? – 2016-05-14 15:15:14