2010-06-10 92 views
0

我想通過設置爲一個blob,以便日後檢索保存在數據庫(H2)的Java ArrayList。如果這是一個不好的方法,請說 - 我一直無法找到這方面的很多信息。難度設置ArrayList爲java.sql.Blob保存在數據庫中使用休眠

我在數據庫中有一個Blob類型的列,Hibernate使用java.sql.Blob映射到這個列。我掙扎的代碼是:

Drawings drawing = new Drawings(); 

try { 
    ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
    ObjectOutputStream oos = null; 
    oos = new ObjectOutputStream(bos); 
    oos.writeObject(plan.drawingPane21.pointList); 
    byte[] buff = bos.toByteArray(); 
    Blob drawingBlob = null; 
    drawingBlob.setBytes(0, buff); 
    drawing.setDrawingObject(drawingBlob); 
} catch (Exception e){ 
    System.err.println(e); 
} 

我想保存到BLOB(plan.drawingPane21.pointList)目的是ArrayList<DrawingDot>類型,DrawingDot被實施Serializable的自定義類。

我的代碼在drawingBlob.setBytes(0, buff);上失敗NullPointerException

幫助讚賞。

回答

0

你從來沒有初始化的變量drawingBlob:

Blob drawingBlob = null;//<- not initialized 
drawingBlob.setBytes(0, buff);//<- drawingBlob is null here. 

我的Hibernate的知識是非常有限的,但我相信,如果數據類型映射到一個斑點,則Hibernate將執行序列對你來說,這作爲在blob中設置數據的標準方式是通過參數化PreparedStatement中的方法是有意義的。

2

如果有些人有同樣的問題,我解決它通過採取SerialBlob類的構造函數的優勢,而不是使用setBytes:

byte[] buff = bos.toByteArray(); 
Blob drawingBlob = null; 
drawingBlob = new SerialBlob(buff); 
drawing.setDrawingObject(drawingBlob);