<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-72  評(píng)論-63  文章-0  trackbacks-0

    Hibernate SQL Server BLOB

    BLOB 數(shù)據(jù)在 SQL Server 數(shù)據(jù)庫(kù)中主要由 IMAGE 類型體現(xiàn),最大容量為 2GB 。其存儲(chǔ)方式不同于普通的數(shù)據(jù)類型,對(duì)于普通類型的數(shù)據(jù)系統(tǒng)直接在用戶定義的字段上存儲(chǔ)數(shù)據(jù)值,而對(duì)于 IMAGE 類型數(shù)據(jù),系統(tǒng)開辟新的存儲(chǔ)頁面來存放這些數(shù)據(jù),表中 IMAGE 類型數(shù)據(jù)字段存放的僅是一個(gè) 16 字節(jié)的指針,該指針指向存放該條記錄的 IMAGE 數(shù)據(jù)的頁面。如果 你對(duì) Hibernate 還不熟息,請(qǐng)看 這里

    ?

    新建名為 “BLOB_TEST” 的表,字段分別是 INT 類型的 “ID” IMAGE 類型的 “MYBLOB” 。從文件系統(tǒng)讀取 “sample.jpg” 并轉(zhuǎn)換成字節(jié)數(shù)組再放進(jìn) BlobTest 對(duì)象實(shí)例。 寫入程序如下:

    ?

    import java.io.*;

    import net.sf.hibernate.*;
    import net.sf.hibernate.cfg.*;

    import bo.*;

    public class Tester {

    ?public void DoTest() {
    ??InputStream in = null;
    ??BlobTest blobTest = null;
    ??Configuration cfg = null;
    ??SessionFactory sessions = null;
    ??Session session = null;
    ??Transaction tx = null;
    ??try {
    ???//begin InputStream
    ???in = new FileInputStream("d:/sample.jpg");
    ???byte[] b = new byte[in.available()];
    ???in.read(b);
    ???in.close();

    ???//begin BlobTest
    ???blobTest = new BlobTest();
    ???blobTest.setMyblob(b);

    ???//begin Hibernate Session
    ???cfg = new Configuration().configure();
    ???sessions = cfg.buildSessionFactory();
    ???session = sessions.openSession();
    ???tx = session.beginTransaction();
    ???session.save(blobTest);
    ???tx.commit();
    ??} catch (Exception e) {
    ???e.printStackTrace();
    ??} finally {
    ???try {
    ????session.close();
    ???} catch (Exception e1) {
    ????e1.printStackTrace();
    ???}
    ??}
    ?}
    }

    ?

    取出 程序如下:

    ?

    import java.io.*;

    import net.sf.hibernate.*;
    import net.sf.hibernate.cfg.*;

    import bo.*;

    public class Tester {

    ?public void DoTest() {
    ??OutputStream out = null;
    ??BlobTest blobTest = null;
    ??Configuration cfg = null;
    ??SessionFactory sessions = null;
    ??Session session = null;
    ??try {
    ???//begin Hibernate Session
    ???cfg = new Configuration().configure();
    ???sessions = cfg.buildSessionFactory();
    ???session = sessions.openSession();

    ???//begin BlobTest
    ???blobTest = new BlobTest();
    ???blobTest = (BlobTest) session.load(BlobTest.class, new Integer(23));

    ???//begin OutputStream
    ???out = new FileOutputStream("d:/sample.jpg");
    ???out.write(blobTest.getMyblob());
    ???out.flush();
    ???out.close();
    ??} catch (Exception e) {
    ???e.printStackTrace();
    ??} finally {
    ???try {
    ????session.close();
    ???} catch (Exception e1) {
    ????e1.printStackTrace();
    ???}
    ??}
    ?}
    }

    ?

    Hibernate MySQL BLOB

    ??? MySQL 中的 BLOB 數(shù)據(jù)由四種類型體現(xiàn),分別是 TINYBLOB 其容量為 256 字節(jié)、 BLOB 其容量為 64KB MEDIUMBLOB 其容量為 16MB LONGBLOB 其容量為 4GB

    ?

    新建名為 “BLOB_TEST” 的表,字段分別是 INTEGER 類型的 “ID” MEDIUMBLOB 類型的 “MYBLOB” 。從文件系統(tǒng)讀取 “sample.jpg” 并轉(zhuǎn)換成字節(jié)數(shù)組再放進(jìn) BlobTest 對(duì)象實(shí)例。 寫入、 取出 程序和上面的 SQL Server 一樣。

    ?

    Hibernate Oracle BLOB

    ??? 為了不使用 “for update” 鎖住數(shù)據(jù)庫(kù),遂打算讓 Oracle LONG RAW 類型保存大對(duì)象,最大容量 2GB 。經(jīng)過測(cè)試后發(fā)現(xiàn),直接寫 JDBC 代碼可以保存,但 Hibernate 只能保存 4K 大小內(nèi)容,換成 Hibernate 3.0 beta3 也未能成功。偶然的機(jī)會(huì)在郵件列表上發(fā)現(xiàn)這是 JDBC Driver 的問題,換成 Oracle 10g 的驅(qū)動(dòng)后問題解決。

    ?

    新建名為 “BLOB_TEST” 的表,字段分別是 NUMBER 類型的 “ID” LONG RAW 類型的 “MYBLOB” 。從文件系統(tǒng)讀取 “sample.jpg” 并轉(zhuǎn)換成字節(jié)數(shù)組再放進(jìn) BlobTest 對(duì)象實(shí)例。 寫入、 取出 程序和 SQL Server 一樣。

    ?

    如果你一定要用 Oracle BLOB 類型,接著往下看:

    ??? Hibernate 處理 Oracle BLOB 類型較特殊 從文件系統(tǒng)讀取 “sample.jpg” 放進(jìn) BlobTest 對(duì)象實(shí)例的是 java.sql.Blob 類型,而不是字節(jié)數(shù)組。

    ?

    import java.io.*;

    import net.sf.hibernate.*;
    import net.sf.hibernate.cfg.*;
    import oracle.sql.*;

    import bo.*;

    public class Tester {

    ?public void DoTest() {
    ??BLOB blob = null;
    ??InputStream in = null;
    ??OutputStream out = null;
    ??BlobTest blobTest = null;
    ??Configuration cfg = null;
    ??SessionFactory sessions = null;
    ??Session session = null;
    ??Transaction tx = null;
    ??try {
    ???//begin InputStream
    ???in = new FileInputStream("d:/sample.jpg");
    ???byte[] b = new byte[in.available()];
    ???in.read(b);
    ???in.close();
    ???
    ???//begin BlobTest
    ???blobTest = new BlobTest();
    ???blobTest.setMyblob(BLOB.empty_lob());
    ???
    ???//begin Hibernate Session
    ???cfg = new Configuration().configure();
    ???sessions = cfg.buildSessionFactory();
    ???session = sessions.openSession();
    ???tx = session.beginTransaction();
    ???session.save(blobTest);
    ???session.flush();
    ???session.refresh(blobTest, LockMode.UPGRADE);
    ???blob = (BLOB) blobTest.getMyblob();
    ???out = blob.getBinaryOutputStream();
    ???out.write(b);
    ???out.close();
    ???session.flush();
    ???tx.commit();
    ??} catch (Exception e) {
    ???e.printStackTrace();
    ??} finally {
    ???try {
    ????session.close();
    ???} catch (Exception e1) {
    ????e1.printStackTrace();
    ???}
    ??}
    ?}
    }

    ?

    取出 程序和其他兩種數(shù)據(jù)庫(kù)操作幾乎一樣。

    ?

    iBATIS SQL Maps SQL Server BLOB

    ??? 建表過程和 Hibernate 操作 SQL Server 一樣,如果 你對(duì) iBATIS SQL Maps 還不熟息,請(qǐng)看 這里

    ?

    映射文件如下:

    ?

    <?xml version="1.0" encoding="UTF-8"?>

    <!DOCTYPE sqlMap
    ??? PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN"
    ??? "
    http://www.ibatis.com/dtd/sql-map-2.dtd ">

    <sqlMap>

    ??? <insert id="insertBlob" parameterClass="bo.BlobTest">
    ????? <![CDATA[
    ??????? insert into blob_test (myblob) values (#myblob#)
    ????? ]]>
    ????? <selectKey resultClass="java.lang.Integer" keyProperty="id">
    ??????? <![CDATA[
    ????????? SELECT @@IDENTITY AS ID
    ??????? ]]>
    ????? </selectKey>
    ??? </insert>

    ??? <resultMap id="get-blob-result" class="bo.BlobTest">
    ????? <result property="id" column="id"/>
    ????? <result property="myblob" column="myblob"/>
    ??? </resultMap>

    ??? <select id="getBlob" resultMap="get-blob-result" parameterClass="bo.BlobTest">
    ????? <![CDATA[
    ??????? select * from blob_test where id=#id#
    ????? ]]>
    ??? </select>
    ???????
    </sqlMap>

    ?

    寫入程序如下:

    ?

    import java.io.*;

    import com.ibatis.sqlmap.client.*;
    import com.ibatis.common.resources.*;

    import bo.*;

    public class Tester {

    ?public void DoTest() {
    ??byte[] b=null;
    ??Reader reader = null;
    ??InputStream in = null;
    ??BlobTest blobTest = null;
    ??SqlMapClient sqlMap = null;
    ??String resource = "SqlMapConfig.xml";
    ??try {
    ???//begin InputStream
    ???in = new FileInputStream("d:/sample.jpg");
    ???b = new byte[in.available()];
    ???in.read(b);
    ???in.close();

    ???//begin BlobTest
    ???blobTest = new BlobTest();
    ???blobTest.setMyblob(b);

    ???//begin SqlMapClient
    ???reader = Resources.getResourceAsReader(resource);
    ???sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
    ???sqlMap.startTransaction();
    ???sqlMap.insert("insertBlob", blobTest);
    ???sqlMap.commitTransaction();
    ??} catch (Exception e) {
    ???e.printStackTrace();
    ??} finally {
    ???try {
    ????sqlMap.endTransaction();
    ???} catch (Exception e1) {
    ????e1.printStackTrace();
    ???}
    ??}
    ?}
    }

    ?

    取出 程序如下:

    ?

    import java.io.*;

    import com.ibatis.sqlmap.client.*;
    import com.ibatis.common.resources.*;

    import bo.*;

    public class Tester {

    ?public void DoTest() {
    ??Reader reader = null;
    ??OutputStream out = null;
    ??BlobTest blobTest = null;
    ??SqlMapClient sqlMap = null;
    ??String resource = "SqlMapConfig.xml";
    ??try {
    ???//begin BlobTest
    ???blobTest = new BlobTest();
    ???blobTest.setId(new Integer(21));

    ???//begin SqlMapClient
    ???reader = Resources.getResourceAsReader(resource);
    ???sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
    ???blobTest = (BlobTest) sqlMap.queryForObject("getBlob", blobTest);

    ???//begin OutputStream
    ???out = new FileOutputStream("d:/sample.jpg");
    ???out.write(blobTest.getMyblob());
    ???out.close();
    ??} catch (Exception e) {
    ???e.printStackTrace();
    ??} finally {
    ???try {
    ????sqlMap.endTransaction();
    ???} catch (Exception e1) {
    ????e1.printStackTrace();
    ???}
    ??}
    ?}
    }

    ?

    iBATIS SQL Maps MySQL BLOB

    ??? 這個(gè)主題很簡(jiǎn)單,需要注意映射文件 insert 元素主鍵生成方式, 寫入、 取出 程序和上面的 SQL Server 一樣

    ?

    ??? <insert id="insertBlob" parameterClass="bo.BlobTest">
    ????? <![CDATA[
    ??????? insert into blob_test (myblob) values (#myblob#)
    ????? ]]>
    ????? <selectKey resultClass="java.lang.Integer" keyProperty="id">
    ??? <![CDATA[
    ????????? select last_insert_id();
    ??? ]]>
    ????? </selectKey>
    ? </insert>
    ?

    iBATIS SQL Maps Oracle BLOB

    ??? 使用 Oracle LONG RAW 類型, 注意映射文件 insert 元素主鍵生成方式, 寫入、 取出 程序和上面的 SQL Server 一樣

    ?

    ??? <insert id="insertBlob" parameterClass="bo.BlobTest">
    ????? <selectKey resultClass="int" keyProperty="id">
    ??????? <![CDATA[
    ????????? select hibernate_sequence.nextval from dual
    ??????? ]]>
    ????? </selectKey>
    ????? <![CDATA[
    ??????? insert into blob_test (id,myblob) values (#id#,#myblob#)
    ????? ]]>
    ??? </insert>
    ?

    如果你一定要用 Oracle BLOB 類型,接著往下看:

    ??? iBATIS 2.0.9 以前,處理 Oracle BLOB 類型相當(dāng)麻煩,要自己實(shí)現(xiàn) TypeHandlerCallback 接口。 iBATIS 2.0.9 的出現(xiàn)使一切都簡(jiǎn)單了,寫入、 取出 程序和上面的 SQL Server 一樣。

    http://java.ccidnet.com/art/297/20051117/374459_1.html

    posted on 2006-06-18 15:07 船長(zhǎng) 閱讀(1176) 評(píng)論(0)  編輯  收藏 所屬分類: J2EE
    主站蜘蛛池模板: 毛片免费在线观看网址| 污网站在线观看免费| 亚洲性无码av在线| 亚洲美女人黄网成人女| 亚洲综合在线成人一区| 亚洲毛片无码专区亚洲乱| 亚洲国产精品综合一区在线| 亚洲第一页在线观看| 亚洲国产成人精品久久 | 91青青青国产在观免费影视| 免费无码毛片一区二区APP| 97国产在线公开免费观看| 24小时日本电影免费看| 国产无人区码卡二卡三卡免费| 免费中文熟妇在线影片 | 日韩免费人妻AV无码专区蜜桃| 小日子的在线观看免费| 四虎免费影院ww4164h| 永久免费毛片在线播放| 日韩a级毛片免费观看| 亚洲av午夜精品一区二区三区| 国产国拍精品亚洲AV片| 亚洲人成网址在线观看| 亚洲乱码一二三四五六区| 亚洲中文字幕乱码熟女在线| 看亚洲a级一级毛片| 国产高清视频免费在线观看 | 亚洲AV无码一区二区乱子仑| WWW国产亚洲精品久久麻豆| 中美日韩在线网免费毛片视频| 99视频免费在线观看| 99久久久精品免费观看国产| 四虎成人免费网站在线| 亚洲国产成人久久综合碰| 亚洲综合精品一二三区在线 | 亚洲动漫精品无码av天堂| 亚洲日韩中文字幕天堂不卡| 午夜亚洲WWW湿好爽| 一个人看的免费观看日本视频www 一个人看的免费视频www在线高清动漫 | 免费国产黄网站在线观看可以下载| 妻子5免费完整高清电视|