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

分享搞定的CLOB字段存取的代码

时间:2009-12-23 15:42来源:未知 作者:admin 点击:
分享到:
采用得是Oracle9i数据库,Jboss或Weblogic。 JDBC采用ORACLE9i自带的Class12.jar ------------- 数据库结构: 代码: CREATE TABLE SNCPARAMETERS ( ID NUMBER(19) NOT NULL, SNCID NUMBER(19), NAME VARCHA

  采用得是Oracle9i数据库,Jboss或Weblogic。
  JDBC采用ORACLE9i自带的Class12.jar
  -------------
  数据库结构:
  代码:
  
  CREATE TABLE SNCPARAMETERS
  (
   ID   NUMBER(19)   NOT NULL,
   SNCID NUMBER(19),
   NAME  VARCHAR2(255),
   VALUE CLOB
  )
   --------------
  BO采用xdoclet建立的:
  代码:
  
  public class SNCParameters extends BaseObject
  {
  
  /**
   * Returns the id.
   *
   * @return   long
   * @hibernate.id
   *   column = "id"
   *   type = "long"
   *   generator-class = "native"
   *   unsaved-value = "null"
   */
  public Long getId()
  {
  return id;
  }
  
  /**
   *  Sets the Id attribute of the SNCParameters object
   *
   * @param  id The new Id value
   */
  public void setId(Long id)
  {
  this.id = id;
  }
  
  
  /**
   * Returns the name.
   *
   * @return   String
   *
   * @hibernate.property
   *   column = "name"
   *   type = "string"
   *   not-null = "true"
   *   unique = "false"
   */
  
  public String getName()
  {
  return name;
  }
  
  /**
   *  Sets the Name attribute of the SNCParameters object
   *
   * @param  name The new Name value
   */
  public void setName(String name)
  {
  this.name = name;
  }
  
  /**
   * Returns the sncId.
   *
   * @return   Long
   *
   * @hibernate.property
   *   column = "sncId"
   *   type = "long"
   *   not-null = "true"
   *   unique = "false"
   */
  
  public Long getSncId()
  {
  return sncId;
  }
  
  /**
   *  Sets the SncId attribute of the SNCParameters object
   *
   * @param  sncId The new SncId value
   */
  public void setSncId(Long sncId)
  {
  this.sncId = sncId;
  }
  
  /**
   * Returns the values.
   *
   * @return   Clob
   *
   * @hibernate.property
   *   column = "value"
   *   type = "clob"
   *   not-null = "true"
   *   unique = "false"
   */
  
  public Clob getValue()
  {
  return value;
  }
  
  /**
   *  Sets the Values attribute of the SNCParameters object
   *
   * @param  values The new Values value
   */
  public void setValue(Clob value)
  {
  this.value = value;
  }
  private Long id;
  private Long sncId;
  private String name;
  private Clob value;
  private String valueString;
  public String getValueString()
  {
  return valueString;
  }
  public void setValueString(String valueString)
  {
  this.valueString = valueString;
  }
  }
  
  注:valueString并不映射到数据库的CLOB字段,只是方便需要使用这个BO的人用GET、SET 处理这个巨长的CLOB字段
  ------------
  xdocLet生成的XML文件:
  代码:
  
  <?xml version="1.0"?>
  
  <!DOCTYPE hibernate-mapping PUBLIC
  "-//Hibernate/Hibernate Mapping DTD 2.0//EN"
  "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
  
  <hibernate-mapping>
  <class
  name="com.idncn.mc.bo.SNCParameters"
  table="SNCParameters"
  dynamic-update="false"
  dynamic-insert="false"
  >
  
  <id
  name="id"
  column="id"
  type="long"
  unsaved-value="null"
  >
  <generator class="native">
  </generator>
  </id>
  
  <property
  name="name"
  type="string"
  update="true"
  insert="true"
  column="name"
  not-null="true"
  unique="false"
  />
  
  <property
  name="sncId"
  type="long"
  update="true"
  insert="true"
  column="sncId"
  not-null="true"
  unique="false"
  />
  
  <property
  name="value"
  type="clob"
  update="true"
  insert="true"
  column="value"
  not-null="true"
  unique="false"
  />
  </class>
  
  </hibernate-mapping>
  
  --------------------
  insert的代码:
  代码:
  
  public List batchAddSncParameters(List sncParametersList, Long sncId) throws DbAccessException
  {
  logger.enterMethod();
  List ret = new ArrayList();
  try
  {
  sess = getSession();
  if (sncParametersList != null && sncParametersList.size() > 0)
  {
  for (int i = 0; i < sncParametersList.size(); i++)
  {
  SNCParameters cp = (SNCParameters) sncParametersList.get(i);
  long newId = -1;
  if (cp != null)
  {
    SNCParameters cpNew = new SNCParameters();
    cpNew.setSncId(sncId);
    cpNew.setName(cp.getName());
    cpNew.setValue(Hibernate.createClob(" "));
    newId = ((Long) sess.save(cpNew)).longValue();
    sess.flush();
  
   sess.refresh(cpNew, LockMode.UPGRADE);
    String content = cp.getValueString();
  
    String appserver = System.getProperty("appserver", "jboss");
    if (!appserver.equalsIgnoreCase("jboss"))
    {
    //weblogic
    OracleThinClob clob = (OracleThinClob) cpNew.getValue();
    Java.io.Writer pw = clob.getCharacterOutputStream();
    pw.write(content);
    pw.flush();
    pw.close();
   }
    else
    {
    //jboss
    oracle.sql.CLOB clob = (oracle.sql.CLOB) cpNew.getValue();
    java.io.Writer pw = clob.getCharacterOutputStream();
    pw.write(content)
  
精彩图集

赞助商链接