posts - 17,  comments - 6,  trackbacks - 0
          在CMP實(shí)體BEAN中使用BLOB數(shù)據(jù)類型
          2005-07-19? ?來源:matrix.org.cn ?作者:matrix.org.cn
          摘要:
          在Oracle這樣的關(guān)系數(shù)據(jù)庫中,CLOB和BLOB類型被用來存放大對象。BOLB表示二進(jìn)制大對象,這種數(shù)據(jù)類型通過用來保存圖片,圖象,視頻等。CLOB表示字符大對象,能夠存放大量基于字符的數(shù)據(jù)。JDBC定義java類型java.sql.Clob 和java.sql.Blob 對應(yīng)數(shù)據(jù)庫中的CLOB和BLOB類型。然而這兩種類型并不能在實(shí)體BEAN中使用,因?yàn)檫@兩個類沒有被序列化(Serializable)。因此我們不能在CMP實(shí)體BEAN中定義java.sql.Clob或java.sql.Bl


          在Oracle這樣的關(guān)系數(shù)據(jù)庫中,CLOB和BLOB類型被用來存放大對象。BOLB表示二進(jìn)制大對象,這種數(shù)據(jù)類型通過用來保存圖片,圖象,視頻等。CLOB表示字符大對象,能夠存放大量基于字符的數(shù)據(jù)。

          JDBC定義java類型java.sql.Clob 和java.sql.Blob 對應(yīng)數(shù)據(jù)庫中的CLOB和BLOB類型。然而這兩種類型并不能在實(shí)體BEAN中使用,因?yàn)檫@兩個類沒有被序列化(Serializable)。因此我們不能在CMP實(shí)體BEAN中定義java.sql.Clob或java.sql.Blob這兩種數(shù)據(jù)類型。

          如果我們要使用數(shù)據(jù)庫的BLOB字段,我們必須在實(shí)體bean中聲明CMP字段為 byte[] 并映射該字段到數(shù)據(jù)庫的BLOB字段。如果要使用CLOB字段,我們需要使用定義CMP字段為 java.lang.String or char[] 。

          一個ENTITY的范例
          在一個企業(yè)里,處于安全考慮,我們也許要將員工的圖片保存到數(shù)據(jù)庫中的表里。這里我們使用EmployeePicture 作為范例來代表員工的圖片實(shí)體。這個EmployeePictureBean CMP有兩個屬性 empno, picture。 picture 字段被定義成byte[]型 。

          該EmployeePicture實(shí)體BEAN被映射到EMPPIC數(shù)據(jù)表, picture 屬性被映射為EMPPIC 表中的picture 字段,該picture字段是定義為BLOB類型的。

          下面是EmployeePictureBean.java的部分核心代碼:

          public abstract class EmployeePictureBean implements EntityBean
          {
          ? ....
          ? public abstract byte[] getPicture();
          ? public abstract void setPicture(byte[] newPicture);
          ? public Long ejbCreate(Long empno, byte[] newPicture)
          ? {
          ? ? setEmpno(empno);
          ? ? setPicture(newPicture);
          ? ? return empno;
          ? }

          ? public void ejbPostCreate(Long empno, byte[] newPicture)
          ? {
          ? }
          ? ...
          }


          如果我們使用OC4J 9.0.4 ,就需要在orion-ejb-jar.xml中定義實(shí)體BEAN屬性到數(shù)據(jù)表字段的映射。如果使用了其他J2EE容器,就需要在相關(guān)廠商的部署描述符中定義O-R映射。下面演示在OC4J中的映射代碼:

          <entity-deployment name="EmployeePicture" data-source="jdbc/OracleDS" table="EMPPIC">
          ? <primkey-mapping>
          ? ? <cmp-field-mapping name="empno" persistence-name="EMPNO" persistence-type="NUMBER(8)"/>
          ? </primkey-mapping>
          ? <cmp-field-mapping name="empno" persistence-name="EMPNO" persistence-type="NUMBER(8)"/>
          ? <cmp-field-mapping name="picture" persistence-name="PICTURE" persistence-type="BLOB"/>
          </entity-deployment>



          客戶端:
          CMP實(shí)體BEAN的客戶端沒有什么特別的處理。唯一需要注意的是在update數(shù)據(jù)表時要使用BufferedInputStream 來讀取IMAGE文件,但在檢索數(shù)據(jù)表時使用OutputStream 。

          下面演示如何讀取一個IMAGE文件,并創(chuàng)建一個BEAN實(shí)例:

           // Locate and open the file

          ? ? File imgFile = new File(fileName);

          ? ? long imgFileSize= imgFile.length();

          ? ? // initialize the byte array

          ? ? byte byteValue[] = new byte[(int)imgFileSize];

          ? ? // Read the file into the byte array

          ? ? InputStream is = new BufferedInputStream(new FileInputStream(imgFile));

          ? ? int len = is.read(byteValue);

          ? ? //Add the byte to the entity bean field

          ? ? if(len!=imgFileSize)

          ? ? {

          ? ? ? ? ? ?System.out.println("Read bytes did not equal file size on directory");

          ? ? }

          ? ? else

          ? ? {

          ? ? ? EmployeePictureLocal employeePicture = empHome.create(empNo , byteValue);

          posted on 2006-06-19 23:51 風(fēng)中的舞者 閱讀(294) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          <2006年6月>
          28293031123
          45678910
          11121314151617
          18192021222324
          2526272829301
          2345678

          常用鏈接

          留言簿(1)

          隨筆檔案

          文章檔案

          java技術(shù)

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 芮城县| 元氏县| 吉林市| 永宁县| 万安县| 蒙自县| 西畴县| 丰顺县| 县级市| 公安县| 明光市| 疏附县| 长武县| 嘉鱼县| 普陀区| 牟定县| 平原县| 堆龙德庆县| 曲麻莱县| 芷江| 平湖市| 会理县| 图片| 桐城市| 水城县| 台南市| 济南市| 德阳市| 合作市| 东乡| 长武县| 马公市| 佛坪县| 隆昌县| 兴仁县| 北海市| 宣城市| 济阳县| 阿拉善右旗| 交城县| 普兰县|