分享搞定的 CLOB 字段存取的代码
2008-01-05 10:50:19 来源:WEB开发网核心提示:采用得是Oracle9i数据库,Jboss或Weblogic,分享搞定的 CLOB 字段存取的代码, JDBC采用ORACLE9i自带的Class12.jar ------------- 数据库结构: 代码: CREATE TABLE SNCPARAMETERS ( ID NUMBER(19) NOT NULL, SN
采用得是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)
更多精彩
赞助商链接