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

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

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

    隨筆-72  評論-63  文章-0  trackbacks-0

    Hibernate SQL Server BLOB

    BLOB 數據在 SQL Server 數據庫中主要由 IMAGE 類型體現,最大容量為 2GB 。其存儲方式不同于普通的數據類型,對于普通類型的數據系統直接在用戶定義的字段上存儲數據值,而對于 IMAGE 類型數據,系統開辟新的存儲頁面來存放這些數據,表中 IMAGE 類型數據字段存放的僅是一個 16 字節的指針,該指針指向存放該條記錄的 IMAGE 數據的頁面。如果 你對 Hibernate 還不熟息,請看 這里

    ?

    新建名為 “BLOB_TEST” 的表,字段分別是 INT 類型的 “ID” IMAGE 類型的 “MYBLOB” 。從文件系統讀取 “sample.jpg” 并轉換成字節數組再放進 BlobTest 對象實例。 寫入程序如下:

    ?

    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 數據由四種類型體現,分別是 TINYBLOB 其容量為 256 字節、 BLOB 其容量為 64KB MEDIUMBLOB 其容量為 16MB LONGBLOB 其容量為 4GB

    ?

    新建名為 “BLOB_TEST” 的表,字段分別是 INTEGER 類型的 “ID” MEDIUMBLOB 類型的 “MYBLOB” 。從文件系統讀取 “sample.jpg” 并轉換成字節數組再放進 BlobTest 對象實例。 寫入、 取出 程序和上面的 SQL Server 一樣。

    ?

    Hibernate Oracle BLOB

    ??? 為了不使用 “for update” 鎖住數據庫,遂打算讓 Oracle LONG RAW 類型保存大對象,最大容量 2GB 。經過測試后發現,直接寫 JDBC 代碼可以保存,但 Hibernate 只能保存 4K 大小內容,換成 Hibernate 3.0 beta3 也未能成功。偶然的機會在郵件列表上發現這是 JDBC Driver 的問題,換成 Oracle 10g 的驅動后問題解決。

    ?

    新建名為 “BLOB_TEST” 的表,字段分別是 NUMBER 類型的 “ID” LONG RAW 類型的 “MYBLOB” 。從文件系統讀取 “sample.jpg” 并轉換成字節數組再放進 BlobTest 對象實例。 寫入、 取出 程序和 SQL Server 一樣。

    ?

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

    ??? Hibernate 處理 Oracle BLOB 類型較特殊 從文件系統讀取 “sample.jpg” 放進 BlobTest 對象實例的是 java.sql.Blob 類型,而不是字節數組。

    ?

    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();
    ???}
    ??}
    ?}
    }

    ?

    取出 程序和其他兩種數據庫操作幾乎一樣。

    ?

    iBATIS SQL Maps SQL Server BLOB

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

    ?

    映射文件如下:

    ?

    <?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

    ??? 這個主題很簡單,需要注意映射文件 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 類型相當麻煩,要自己實現 TypeHandlerCallback 接口。 iBATIS 2.0.9 的出現使一切都簡單了,寫入、 取出 程序和上面的 SQL Server 一樣。

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

    posted on 2006-06-18 15:07 船長 閱讀(1176) 評論(0)  編輯  收藏 所屬分類: J2EE
    主站蜘蛛池模板: 亚洲电影免费在线观看| 在线免费观看色片| 日本精品久久久久久久久免费| 亚洲Av熟妇高潮30p| 亚洲午夜无码AV毛片久久| 精品久久久久久久免费加勒比| 久久成人国产精品免费软件| 大地影院MV在线观看视频免费| 人碰人碰人成人免费视频| 亚洲AV性色在线观看| 精品久久亚洲中文无码| 亚洲国产成人久久三区| 亚洲人成在线播放网站岛国| 亚洲男人的天堂www| 亚洲一区二区高清| 亚洲国产综合精品中文字幕| 国产免费av片在线播放| 日本高清免费不卡视频| 暖暖免费高清日本中文| 在线观看无码的免费网站| 噼里啪啦电影在线观看免费高清| 最近2019中文字幕免费大全5| 男人进去女人爽免费视频国产| 国产免费久久精品丫丫| xxxxxx日本处大片免费看 | 无码乱肉视频免费大全合集| 一级毛片在线观看免费| 91精品免费高清在线| 精品无码人妻一区二区免费蜜桃| 在线美女免费观看网站h| 最近在线2018视频免费观看| 在线观看的免费网站无遮挡| 日韩精品免费一级视频| 无码国产精品一区二区免费式影视 | 一级女人18片毛片免费视频| 羞羞视频在线观看免费| 污污污视频在线免费观看| jizz免费观看视频| 最新久久免费视频| 99视频在线免费看| 国产又黄又爽又猛免费app|