在許多情況下要存儲大型字符串或者二進制數據如圖片等hibernate也提供了對blob和clob類型的支持
blob采用單字節存儲適合保存二進制數據,如圖片文件clob采用多字節存儲適合保存大型文本等
在mssql中 image和ntext分別對應著blob和clob
表映射文件對兩種類型的寫法
對於blob格式的映射類型為type="java.sql.Clob";
對bean的寫法沒區別直接生成getter和setter
保存一個圖片的二進制內容
User user=new User();
FileInputStream image=new FileInputStream("image.jpg");
Blob img=Hibernate.createBlob(image);
user.setImage(img);
Clob desc=Hibernate.createClob("abcd");
user.setDesc(desc);
save(user);
////保存blob和clob類型完成
讀取:
讀取blob類型二進制數據
Blog img=user.getImage();
InputStream inputs=img.getBinaryStream();//獲取二進制流
寫入文件
FileOutStream fos=new FileOutStream("tempimg.jpg");
byte [] buffer=new byte[102400];
int len;
while((len=inputs.read(buffer))!=-1)
{
fos.write(buffer,0,len);
}
fos.close;
inputs.close;
//oracle執行會出現以下錯誤
streams type cannot be userd in batching
Orcale JDBC不允許流操作以批量方式進行(oracle blob采用流機制作為數據讀寫方式)
user.setImage(Hibernate.createBlob(new byte[1]));
user.setDesc(Hibernate.careteClob(" "));
session.save(user);
session.flush();
session.refresh(user,LockMode.UPGRADE);
向裡面blob寫入實際內容同上
寫入clob
oracle.sql.Clob clob=user.getDesc();
Writer writer=clob.getCharacterOutputStream();
writer.write("abcd");
session.save(user);