龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > JAVA开发 >

在CMP实体BEAN中使用BLOB数据类型[组图]

时间:2009-12-23 15:42来源:未知 作者:admin 点击:
分享到:
在Oracle这样的关系数据库中,CLOB和BLOB类型被用来存放大对象。BOLB表示二进制大对象,这种数据类型通过用来保存图片,图象,视频等。CLOB表示字符大对象,能够存放大量基于字符的数
  在Oracle这样的关系数据库中,CLOB和BLOB类型被用来存放大对象。BOLB表示二进制大对象,这种数据类型通过用来保存图片,图象,视频等。CLOB表示字符大对象,能够存放大量基于字符的数据。
  
   <!-- frame contents -->
<!-- /frame contents -->   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));
  
  

精彩图集

赞助商链接