0

我想編寫一個Java程序,它接受任意數據並將其存儲在MySQL數據庫中。稍後可以再次讀取數據並重建原始對象結構。使用BeanUtils序列化爲鍵/值對

背景是,我想要一個通用工具,需要電子郵件驗證的表單才能完成。所以:

  1. 用戶填寫表格,
  2. 的數據被存儲,如上所述,
  3. 電子郵件被髮送到與含有一定UUID識別數據集的鏈接的用戶,
  4. 用戶點擊鏈接,
  5. 該servlet使用鏈接中的UUID加載存儲的數據並處理數據。

我想這個工作的任何數據,不僅字符串/字符串或字符串/ int對。 我正在考慮使用org.apache.common.beanutils中的LazyDynaBean作爲將數據傳遞到我的工具的手段。

問題是:是否有一種很好的方式來序列化這些東西,即使值是bean(讓我們限制Java Bean),而不僅僅是基元?

我在想,我的數據庫表可能看起來像這樣

emailVerification 
| ID | UUID | validUntil | 

emailVerificationData 
| ID | emailVerification.ID | name | index | key | value | className | 

那是feasable呢? 任何人都可以指出我如何將DynaBean存儲和加載到這個結構中的正確方向?或者我錯過的其他選擇?

謝謝你一堆。

+0

爲什麼你不能數據庫? – Santosh

回答

0

你可以序列化/反序列化你的Bean和從XML(下面的s.example)並將字符串存儲在數據庫中。

這有幫助嗎?

public static String beanToXMLString(final Object bean) { 
    String returnvalue = null; 
    final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); 
    final XMLEncoder xmlEncoder = new XMLEncoder(new BufferedOutputStream(byteArrayOutputStream)); 
    xmlEncoder.writeObject(bean); 
    xmlEncoder.close(); 
    returnvalue = byteArrayOutputStream.toString(); 
    return returnvalue; 
} 

public static Object beanFromXMLString(final String xml) { 
    Object returnvalue = null; 
    final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(xml.getBytes()); 
    final XMLDecoder xmlDecoder = new XMLDecoder(new BufferedInputStream(byteArrayInputStream)); 
    returnvalue = xmlDecoder.readObject(); 
    xmlDecoder.close(); 
    return returnvalue; 
} 
+0

謝謝,這是一個有效的解決方案。我之前想過這個。缺點是,我無法運行任何DB查詢來收集關於鍵和值的頻率的統計信息。根據我的經驗, – marc82ch

+0

:XMLEncoder/Decoder糟透了。我會使用XStream或JAXB(與JacksonMapper)來序列化一個對象。 – cproinger

相關問題