浏览 35045 次
该帖已经被评为精华帖
|
|
---|---|
作者 | 正文 |
发表时间:2004-05-10
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);; pw.flush();; pw.close();; } ret.add(new Long(newId););; } } } } catch (Exception e); { logger.error(e);; ErrorReason errorReason = new ErrorReason(ErrorReason.INSERT_OBJECT_FAILED_REASON);; throw new DbAccessException(DbAccessException.DBA_OPERATE_EXCEPTION, errorReason);; } finally { closeSession(sess);; logger.exitMethod();; } return ret; } ----------------- 注:Weblogic必须使用weblogic.jdbc.vendor.oracle.OracleThinClob --------------------- 读取CLOB字段: public List selectSncParametersBySncId(long sncId); throws DbAccessException { logger.enterMethod();; List ret = new ArrayList();; try { sess = getSession();; String query = "select cp from cp in class com.idncn.mc.bo.SNCParameters where cp.sncId = ?"; logger.debug("SQL=" + query);; List iter = sess.find(query, new Long(sncId);, Hibernate.LONG);; for (int i = 0; i < iter.size();; i++); { SNCParameters newCp = new SNCParameters();; SNCParameters cp = (SNCParameters); (iter.get(i););; logger.debug("after fetch:" + cp);; newCp.setId(cp.getId(););; newCp.setSncId(cp.getSncId(););; newCp.setName(cp.getName(););; java.sql.Clob clob = cp.getValue();; if (clob != null); { logger.debug("b===" + clob.length(););; String b = clob.getSubString(1, (int); clob.length(););; //logger.debug("b==="+b);; newCp.setValueString(b);; } ret.add(newCp);; } } catch (Exception e); { logger.error(e);; ErrorReason errorReason = new ErrorReason(ErrorReason.SELECT_FAILED_REASON);; throw new DbAccessException(DbAccessException.DBA_OPERATE_EXCEPTION, errorReason);; } finally { closeSession(sess);; logger.exitMethod();; } return ret; } --------------- 更新这个字段的代码: public void updateSncParameters(SNCParameters newParam); throws DbAccessException { logger.enterMethod();; try { sess = getSession();; Long id = newParam.getId();; SNCParameters pp = (SNCParameters); sess.load(SNCParameters.class, id, net.sf.hibernate.LockMode.UPGRADE);; pp.setSncId(newParam.getSncId(););; pp.setName(newParam.getName(););; pp.setId(newParam.getId(););; String newValue = newParam.getValueString();; logger.debug("Update Length =" + newValue.length(););; String appserver = System.getProperty("appserver", "jboss");; logger.debug("appserver: " + appserver);; if (!appserver.equalsIgnoreCase("jboss");); { //weblogic OracleThinClob clob = (OracleThinClob); pp.getValue();; if (pp != null); { java.io.Writer pw = clob.getCharacterOutputStream();; pw.write(newValue);; pw.flush();; pw.close();; } } else { //jboss oracle.sql.CLOB clob = (oracle.sql.CLOB); pp.getValue();; if (pp != null); { java.io.Writer pw = clob.getCharacterOutputStream();; pw.write(newValue);; pw.flush();; pw.close();; } } } catch (Exception e); { logger.error(e);; ErrorReason errorReason = new ErrorReason(ErrorReason.UPDATE_OBJECT_FAILED_REASON);; throw new DbAccessException(DbAccessException.DBA_OPERATE_EXCEPTION, errorReason);; } finally { closeSession(sess);; logger.exitMethod();; } } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2004-06-08
OracleThinClob clob = (OracleThinClob) pp.getValue();
请问我怎么执行到这一步出现java.lang.ClassCastException |
|
返回顶楼 | |
发表时间:2004-09-28
请问我用hibernate插入clob的时候出现乱码是怎么回事?
数据库:oracle9i appS: tomcat |
|
返回顶楼 | |
发表时间:2004-10-11
随便找个编码就成了,
我用java.net.URLEncoder.encode(),编码,取出的时候再解码就行了, |
|
返回顶楼 | |
发表时间:2004-10-16
DreamOne
换换你的wls的连接池的驱动啊, |
|
返回顶楼 | |