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


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

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

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

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

          該EmployeePicture實體BEAN被映射到EMPPIC數據表, 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中定義實體BEAN屬性到數據表字段的映射。如果使用了其他J2EE容器,就需要在相關廠商的部署描述符中定義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實體BEAN的客戶端沒有什么特別的處理。唯一需要注意的是在update數據表時要使用BufferedInputStream 來讀取IMAGE文件,但在檢索數據表時使用OutputStream 。

          下面演示如何讀取一個IMAGE文件,并創建一個BEAN實例:

           // 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 風中的舞者 閱讀(295) 評論(0)  編輯  收藏

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


          網站導航:
           
          <2006年6月>
          28293031123
          45678910
          11121314151617
          18192021222324
          2526272829301
          2345678

          常用鏈接

          留言簿(1)

          隨筆檔案

          文章檔案

          java技術

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 南投市| 乐至县| 侯马市| 平和县| 黄梅县| 仁怀市| 绥江县| 泰安市| 十堰市| 佛冈县| 仪陇县| 宁化县| 奉新县| 土默特左旗| 勃利县| 称多县| 连云港市| 霍林郭勒市| 文化| 布拖县| 潢川县| 灵寿县| 象州县| 景泰县| 紫阳县| 晋州市| 普陀区| 英山县| 若尔盖县| 巨鹿县| 涞水县| 富阳市| 南通市| 双流县| 兴安县| 陆川县| 增城市| 卢氏县| 南通市| 五峰| 和静县|