Spring 對 Lob 的支援...
2006-08-14 21:03
369 查看
如果要將 將檔案存入資料庫,我們在JDBC中可以使用CLOB與BLOB來分別針對文字檔案與二進位檔案進行儲存,Spring中可以透過JdbcTemplate來處理CLOB與BLOB。
舉個例子來說,假設您的MySQL資料庫表格如下:
假設我們現在分別讀進一個文字檔案與二進位檔案,並想將之儲存至資料庫中,則我們可以使用JdbcTemplate,例如:
JdbcTemplate中傳入了AbstractLobCreatingPreparedStatementCallback的實作,並傳入一 個 LobHandler,對於MySQL(MS SQL Server或Oracle 10g),這邊使用DefaultLobHandler即可,對於Oracle 9i特定的LOB處理,我們可以使用OracleLobHandler。
如果要從資料庫中將資料讀取出來,並另存為檔案,我們可以使用以下的程式:
在使用Spring搭配Hibernate時,可以簡化對Lob型態的處理,只要在SessionFactory建構時指定LobHandler,例如:
* beans-config.xml
在這邊指定LobHandler時,對於MySQL、DB2、MS SQL Server、Oracle 10g,使用DefaultLobHandler即可,而對於Oracle 9i,則可以使用OracleLobHandler。
接下來的操作與一般對HibernateTemplate的操作無異,例如您的資料庫表格為:
Spring的ClobStringType可以將CLOB映射至String,而BlobByteArrayType可以將BLOB映射至byte[],所以我們可以設計一個User類別如下:
* User.java
Use.hbm.xml沒什麼特別的:
* User.hbm.xml
以下是個簡單的儲存與讀取Lob的程式片段示範:
舉個例子來說,假設您的MySQL資料庫表格如下:
CREATE TABLE test ( id INT AUTO_INCREMENT PRIMARY, txt TEXT, image BLOB ); |
File binaryFile = File(); File txtFile = File(); InputStream is = FileInputStream(binaryFile); Reader reader = FileReader(txtFile); JdbcTemplate jdbcTemplate = JdbcTemplate(dataSource); LobHandler lobHandler = DefaultLobHandler(); jdbcTemplate.execute(, AbstractLobCreatingPreparedStatementCallback(lobHandler) setValues(PreparedStatement pstmt, LobCreator lobCreator) SQLException, DataAccessException lobCreator.setClobAsCharacterStream(pstmt, 1, reader, () txtFile.length()); lobCreator.setBlobAsBinaryStream(pstmt, 2, is, () binaryFile.length()); ); reader.close(); is.close(); |
如果要從資料庫中將資料讀取出來,並另存為檔案,我們可以使用以下的程式:
Writer writer = FileWriter(); OutputStream os = FileOutputStream( File()); jdbcTemplate.query(, Object[] Integer(1), AbstractLobStreamingResultSetExtractor() streamData(ResultSet rs) SQLException, IOException, DataAccessException FileCopyUtils.copy(lobHandler.getClobAsCharacterStream(rs, 1), writer); FileCopyUtils.copy(lobHandler.getBlobAsBinaryStream(rs, 2), os); ); writer.close(); os.close(); |
在使用Spring搭配Hibernate時,可以簡化對Lob型態的處理,只要在SessionFactory建構時指定LobHandler,例如:
* beans-config.xml
<?xml version= encoding=?> <!DOCTYPE beans PUBLIC > <beans> <bean id= class=> <property name=> <value>com.mysql.jdbc.Driver</value> </property> <property name=> <value>jdbc:mysql: </property> <property name=> <value>root</value> </property> <property name=> <value>123456</value> </property> </bean> <bean id= class=/> <bean id= class= destroy-method=> <property name=> <ref bean=/> </property> <property name=> <ref bean=/> </property> <property name=> <list> <value>onlyfun/caterpillar/User.hbm.xml</value> </list> </property> <property name=> <props> <prop key=> org.hibernate.dialect.MySQLDialect </prop> </props> </property> </bean> <bean id= class=> <property name=> <ref bean=/> </property> </bean> </beans> |
接下來的操作與一般對HibernateTemplate的操作無異,例如您的資料庫表格為:
CREATE TABLE user ( id INT auto_increment PRIMARY Key, txt TEXT, image BLOB ); |
* User.java
onlyfun.caterpillar; User Integer id; String txt; [] image; Integer getId() id; setId(Integer id) this.id = id; [] getImage() image; setImage([] image) this.image = image; String getTxt() txt; setTxt(String txt) this.txt = txt; |
* User.hbm.xml
<?xml version= encoding=?> <!DOCTYPE hibernate-mapping PUBLIC > <hibernate-mapping> < name= table=> <id name= column=> <generator class=/> </id> <property name= column=/> <property name= column=/> </class> </hibernate-mapping> |
ApplicationContext context = FileSystemXmlApplicationContext(); InputStream is = FileInputStream( File()); [] b = [is.available()]; is.read(b); is.close(); User user = User(); user.setTxt(); user.setImage(b); HibernateTemplate hibernateTemplate = (HibernateTemplate) context.getBean(); hibernateTemplate.save(user); user = (User) hibernateTemplate.execute( HibernateCallback() Object doInHibernate(Session session) HibernateException, SQLException User user = (User) session.load(User.class, Integer(1)); Hibernate.initialize(user); user; ); System.out.println(user.getTxt()); b = user.getImage(); OutputStream os = FileOutputStream( File()); os.write(b); os.close(); |
相关文章推荐
- Spring 對 Lob 的支援...
- spring+jdbc操控LOB对象
- Spring 让 LOB 数据操作变得简单易行
- Spring的lobhandler
- Spring 让 LOB 数据操作变得简单易行
- Spring 让 LOB 数据操作变得简单易行
- Hibernate + Spring 操作 Lob 详解
- Spring 让 LOB 数据操作变得简单易行
- Struts+Spring+Hibernate处理Lob(Blob,Clob)-->sessionFactory中注入 org.springframework.jdbc.support.lob.Def
- Spring 让 LOB 数据操作变得简单易行
- 用spring操作oracle lob
- Spring 让 LOB 数据操作变得简单易行
- Spring让LOB数据操作变得简单易行
- Spring 让 LOB 数据操作变得简单易行
- Caused by: java.lang.ClassNotFoundException: org.springframework.jdbc.support.lob.LobHandler
- Spring 让 LOB 数据操作变得简单易行
- Spring 让 LOB 数据操作变得简单易行
- spring处理lob字段
- Spring 让 LOB 数据操作变得简单易行
- Spring 让 LOB 数据操作变得简单易行,LOB 代表大对象数据,包括 BLOB 和 CLOB 两种类型