數據庫表以下:java
book表sql
id | 該表的主鍵。number類型。 |
photo | 表明圖書的圖片,blob類型。 |
description | 圖書的描述,clob類型。 |
省略hibernate配置文件,實體映射文件和實體類代碼,直接帖實現代碼:數據庫
package accp.hibernate; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.sql.Blob; import java.sql.Clob; import org.hibernate.Hibernate; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; public class Client { public static void main(String[] args) throws IOException { //獲得session Configuration cfg = new Configuration().configure(); SessionFactory sf = cfg.buildSessionFactory(); Session session = sf.openSession(); //獲得圖片的blob InputStream in = new FileInputStream("F:\\4563123.jpg"); Blob blob = Hibernate.createBlob(in); //獲得簡介的clob Clob clob = Hibernate.createClob("這是一本書和詳細描述。#(*&#@¥%(*&@¥)(@#¥#¥"); //建立圖書對象 Book book = new Book(); book.setPhoto(blob); book.setDescription(clob); //存進數據庫 session.beginTransaction(); session.save(book); session.getTransaction().commit(); session.close(); } }
使用hibernate的靜態方法createBlob()獲得Blob對象。createBlob方法須要一個InputStream對象做爲參數。new一個FileInputStream做爲它的參數,假設在F盤有一個圖片文件名爲4563123.jpg。session
使用hibernate的靜態方法createClob()獲得Clob對象。createClob方法直接傳入字符串便可。app
省略hibernate配置文件,實體映射文件和實體類代碼,直接帖實現代碼:ui
1 package accp.hibernate; 2 3 import java.io.FileOutputStream; 4 import java.io.IOException; 5 import java.io.InputStream; 6 import java.io.OutputStream; 7 import java.io.Reader; 8 import java.sql.SQLException; 9 import org.hibernate.Session; 10 import org.hibernate.SessionFactory; 11 import org.hibernate.cfg.Configuration; 12 13 public class Client { 14 15 public static void main(String[] args) throws IOException, SQLException { 16 //獲得session 17 Configuration cfg = new Configuration().configure(); 18 SessionFactory sf = cfg.buildSessionFactory(); 19 Session session = sf.openSession(); 20 21 //從數據庫裏取值 22 session.beginTransaction(); 23 Book book = (Book)session.get(Book.class,22); 24 session.getTransaction().commit(); 25 session.close(); 26 //把簡歷打印到控制檯 27 Reader reader = book.getDescription().getCharacterStream(); 28 int i = reader.read(); 29 while(i!=-1){ 30 System.out.print((char)i); 31 i=reader.read(); 32 } 33 reader.close(); 34 //把圖片拷貝到D盤 35 InputStream in = book.getPhoto().getBinaryStream(); 36 OutputStream out=new FileOutputStream("d:\\out.jpg"); 37 byte[] b=new byte[1024]; 38 while((i=in.read(b))!=-1){ 39 out.write(b); 40 } 41 out.close(); 42 in.close(); 43 } 44 45 }
21-25行代碼把數據從數據庫中取出,封裝到book對象中。spa
爲了驗證取值是否成功,第26-33行代碼把Clob對象的內容打印到控制檯,經過Clob對象的getCharacterStream()方法獲得包含 CLOB
數據的 java.io.Reader
對象,而後經過操做Reader對象把內容輸出。hibernate
第34-42行代碼把Blob對象包含的內容拷貝到d:\out.jpg文件中。經過Blob對象的getBinaryStream()方法獲得包含 BLOB
數據的流,經過操做流把內容拷貝。code
hibernate4相比hibernate3要複雜一些,以下:對象
//省略import........... public class Client { public static void main(String[] args) throws IOException { //獲得session Configuration cfg = new Configuration().configure(); ServiceRegistry sr = new ServiceRegistryBuilder().applySettings(cfg.getProperties()).buildServiceRegistry(); SessionFactory sf = cfg.buildSessionFactory(sr); Session session = sf.openSession(); //獲得LobHelper LobHelper lobHelper = session.getLobHelper(); //獲得圖片的blob InputStream in = new FileInputStream("F:\\4563123.jpg"); Blob blob = lobHelper.createBlob(in, in.available()); //獲得簡介的clob Clob clob = lobHelper.createClob("這是一本書。#(*&#@¥%(*&@¥)(@#¥#¥"); //建立圖書對象 Book book = new Book(); book.setPhoto(blob); book.setDescription(clob); //存進數據庫 session.beginTransaction(); session.save(book); session.getTransaction().commit(); session.close(); } }
hibernate4中獲得session對象的方法和hibernate3中略有不一樣,但用hibernate3的寫法也是能夠的。
在hibernate4中 hibernate.createBlob() 方法和 hibernate.createClob() 已通過時,取而代之的是LobHelper.createBlob()和lobHelper.createClob()。能夠經過session.getLobHelper();獲得LobHerlper對象。
取值 和hibernate3 基本同樣,這裏再也不演示!