2010-05-20 137 views
8

我想在ObjectOutputStream上創建,但我不想將對象保存在文件中,那麼該怎麼做?所有的教程(我發現)認爲,大約只有文件的方式:從對象創建對象輸出流

 FileOutputStream fos = new FileOutputStream("t.tmp"); 
     ObjectOutputStream oos = new ObjectOutputStream(fos); 
     oos.writeObject(new Date()); 
     oos.close(); 

我想將對象存儲到數據庫中,所以我需要從PreparedStatement類指定方法setBinaryStream()流。

謝謝回答...

回答

7

將其存儲在字節數組中。您可以使用ByteArrayOutputStream。這樣你可以使用PreparedStatement#setBytes()

ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
ObjectOutputStream oos = new ObjectOutputStream(baos); 
oos.writeObject(new Date()); 
oos.close(); 
// ... 
preparedStatement.setBytes(i, baos.toByteArray()); 

這就是說,這是非常好聞。你確定你需要將Java對象序列化到數據庫中嗎?這樣他們是不可檢索和不可測的。例如,如果您將每個Person存儲在數據庫中,則不能再使用SELECT * FROM person WHERE name = 'John'。通常的做法是執行實體和數據庫表的1:1映射。例如,Date可以完美地存儲在DATETIME/TIMESTAMP列中。

+0

我絕對知道這不是一個好習慣,在我看來,沒有理由不知道這種編程方式:-) – coubeatczech 2010-05-20 12:00:18

+0

好吧,讓我們假設你知道你在做什麼:)不客氣。 – BalusC 2010-05-20 12:16:46

5
ByteArrayOutputStream bos = new ByteArrayOutputStream(); 

ObjectOutputStream os = new ObjectOutputStream(bos); 
os.writeObject(new Date()); 
os.close(); 

byte[] data = bos.toByteArray(); 

所以,現在你有一個字節數組,做你想要做什麼用。

0

您特別需要使用outputstream來寫入數據庫嗎?在嘗試編寫outputstream實現之前,我會認真考慮查看持久性API。因爲連接細節等可能會變得棘手。

看看link text並記住它也可以在J2SE中使用。