如果要將
將檔案存入資料庫,我們在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 ( |
假設我們現在分別讀進一個文字檔案與二進位檔案,並想將之儲存至資料庫中,則我們可以使用JdbcTemplate,例如:
File binaryFile = File(); |
JdbcTemplate中傳入了AbstractLobCreatingPreparedStatementCallback的實作,並傳入一 個 LobHandler,對於MySQL(MS SQL Server或Oracle 10g),這邊使用DefaultLobHandler即可,對於Oracle 9i特定的LOB處理,我們可以使用OracleLobHandler。
如果要從資料庫中將資料讀取出來,並另存為檔案,我們可以使用以下的程式:
Writer writer = FileWriter(); |
在使用Spring搭配Hibernate時,可以簡化對Lob型態的處理,只要在SessionFactory建構時指定LobHandler,例如:
* beans-config.xml
xml 代码
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" "http://www.springframework.org/dtd/spring-beans.dtd">
- <beans>
- <bean id="dataSource"
- class="org.springframework.jdbc.datasource.DriverManagerDataSource">
- <property name="driverClassName">
- <value>com.mysql.jdbc.Driver</value>
- </property>
- <property name="url">
- <value>jdbc:mysql://localhost:3306/demo</value>
- </property>
- <property name="username">
- <value>root</value>
- </property>
- <property name="password">
- <value>123456</value>
- </property>
- </bean>
- <bean id="lobHandler"
- class="org.springframework.jdbc.support.lob.DefaultLobHandler" />
- <bean id="sessionFactory"
- class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"
- destroy-method="close">
- <property name="dataSource">
- <ref bean="dataSource" />
- </property>
- <property name="lobHandler">
- <ref bean="lobHandler" />
- </property>
- <property name="mappingResources">
- <list>
- <value>onlyfun/caterpillar/User.hbm.xml</value>
- </list>
- </property>
- <property name="hibernateProperties">
- <props>
- <prop key="hibernate.dialect">
- org.hibernate.dialect.MySQLDialect
- </prop>
- </props>
- </property>
- </bean>
- <bean id="hibernateTemplate"
- class="org.springframework.orm.hibernate3.HibernateTemplate">
- <property name="sessionFactory">
- <ref bean="sessionFactory" />
- </property>
- </bean>
- </beans>
在這邊指定LobHandler時,對於MySQL、DB2、MS SQL Server、Oracle 10g,使用DefaultLobHandler即可,而對於Oracle 9i,則可以使用OracleLobHandler。
接下來的操作與一般對HibernateTemplate的操作無異,例如您的資料庫表格為:
CREATE TABLE user ( |
Spring的ClobStringType可以將CLOB映射至String,而BlobByteArrayType可以將BLOB映射至byte[],所以我們可以設計一個User類別如下:
* User.java
onlyfun.caterpillar; |
Use.hbm.xml沒什麼特別的:
* User.hbm.xml
xml 代码
- <?xml version="1.0" encoding="utf-8"?>
- <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
- <hibernate-mapping>
- <class name="onlyfun.caterpillar.User" table="user">
- <id name="id" column="id">
- <generator class="native" />
- </id>
- <property name="txt" column="txt" />
- <property name="image" column="image" />
- </class>
- </hibernate-mapping>
以下是個簡單的儲存與讀取Lob的程式片段示範:
ApplicationContext context = |
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1064190