1.查询该clob字段

<select id="selectItsmTask" resultType="java.util.HashMap"
parameterType="java.util.HashMap">
select a.task_oid,a.task_history from itsm_task a where a.task_oid = #{REQ_TASK_OID,jdbcType=VARCHAR}
</select>

2.处理该clob字段查询结果

/**
* Clob类型 转String
*
* @param clob
* @return
*/
private String ClobToString(Clob clob) {
String ret = "";
try {
Reader read = clob.getCharacterStream();
BufferedReader br = new BufferedReader(read);
String s;
s = br.readLine();
StringBuffer sb = new StringBuffer();
while (s != null) {
sb.append(s);
s = br.readLine();
}
ret = sb.toString();
if (br != null) {
br.close();
}
if (read != null) {
read.close();
}
} catch (SQLException e) {
logger.error("Clob转String失败(sql):" + e);
} catch (IOException e) {
logger.error("Clob转String失败:" + e);
}
return ret;
}
/**
* 修改clob字段内容
*
* @param map
* @return
*/
private void updateClob(Map<String, Object> map) {
Map<String, Object> updateInfo = new HashMap<String, Object>();
updateInfo.put("reqTaskOid", map.get("REQ_TASK_OID"));
// 获取itsm_task中的task_history字段内容
Map<String, Object> result = fieldsModifyMapper.selectItsmTask(map);
Clob columnClob = (Clob) result.get("TASK_HISTORY");
String taskHistory = ClobToString(columnClob);
// 修改itsm_task中的task_history字段内容
// 创建xml的Document对象
try {
Document document = DocumentHelper.parseText(taskHistory);
List lists = document.selectNodes("/workflow/node/fields/field");//寻找field节点
Iterator iter = lists.iterator();
while (iter.hasNext()) {
Element fieldElement = (Element) iter.next();
if (fieldElement.attributes().size() > 0) {
Attribute attr = (Attribute) fieldElement.attributes().get(0);
if (attr.getValue().equals("hope_finish_date")) {
fieldElement.setText("<![CDATA["+String.valueOf(map.get("FLD_HOPE_FINISH_DATE_NEW"))+"]]>");
}
if (attr.getValue().equals("software_req_content")) {
fieldElement.setText("<![CDATA["+String.valueOf(map.get("FLD_SOFTWARE_REQ_CONTENT_NEW"))+"]]>");
}
if (attr.getValue().equals("req_complexity")) {
fieldElement.setText("<![CDATA["+String.valueOf(map.get("FLD_REQ_COMPLEXITY_NEW_ID"))+"]]>");
}
if (attr.getValue().equals("is_dev_assessment")) {
fieldElement.setText("<![CDATA["+String.valueOf(map.get("FLD_IS_DEV_ASSESSMENT_NEW_ID"))+"]]>");
}
}
}
updateInfo.put("taskHistory", StringEscapeUtils.unescapeXml(document.asXML()));
} catch (DocumentException e) {
e.printStackTrace();
}
fieldsModifyMapper.updateItsmTask(updateInfo);
}

3.更新该clob字段查询结果

<update id="updateItsmTask" parameterType="java.util.HashMap">
update itsm_task a
<set>
<if test="taskHistory != null">
a.task_history =#{taskHistory,jdbcType=CLOB}
</if>
</set>
where a.task_oid = #{reqTaskOid,jdbcType=VARCHAR}
</update>

**注意:**使用StringEscapeUtils.unescapeXml(String str)方法,防止标签符号在存入Oracle数据库的时候被转义。

Java更新Oracle的clob类型字段的更多相关文章

  1. .Net处理Oracle中Clob类型字段总结

    最近在做项目中用到Clob这个字段,Clob是存储无限长字符的Oracle字段,用的时候网上找资料找了好久,内容不是很多,大部分都不能用,当然也有可以用的,测试了不同版本,整理了一下,给大家在做项目的 ...

  2. java、oracle对CLOB处理

    oracle CLOB字段转换位VARCHAR 1.实际上处理CLOB字段的时候,直接TO_CHAR,当长度超过4000的时候,会报错,提示列被截取: CLOB转varchar2:select to_ ...

  3. Spring JDBC处理CLOB类型字段

    以下示例将演示使用spring jdbc更新CLOB类型的字段值,即更新student表中的可用记录. student表的结构如下 - CREATE TABLE student( ID INT NOT ...

  4. Oracle中Clob类型处理解析

    最近利用NHibernate映射类型为Clob字段在插入数据时发现当字符的字节数(一个半角字符一个字节,一个全角字符两个字节)在2000-4000之间时报错(ORA-01461:仅可以插入LONG列的 ...

  5. Oracle中Clob类型处理解析:ORA-01461:仅可以插入LONG列的LONG值赋值

    感谢原作者:破剑冰-Oracle中Clob类型处理解析 上一篇分析:ORA-01461: 仅能绑定要插入 LONG 列的 LONG 值 最近为Clob字段在插入数据时发现当字符的字节数(一个半角字符一 ...

  6. Oracle中Clob类型处理解析 (转)

    转:原文:http://blog.csdn.net/pojianbing/article/details/2789426      最近利用NHibernate映射类型为Clob字段在插入数据时发现当 ...

  7. ORACLE插入DATE类型字段

    1 怎样在ORACLE中输入DATE类型的字段 insert into table_name (date_column) values(to_date('2006-06-04','yyyy-mm-dd ...

  8. Java 存储和读取 oracle CLOB 类型字段的实用方法

    import java.io.BufferedReader; import java.io.IOException; import java.io.Reader; import java.io.Str ...

  9. oracle中关于clob类型字段的查询效率问题

    今天,公司项目某个模块的导出报如下错误: HTTP Status 500 – Internal Server Error Type Exception Report Message Handler d ...

随机推荐

  1. [Hihocoder] 字符串排序

    题目 http://hihocoder.com/problemset/problem/1712 题解 https://www.zybuluo.com/wsndy-xx/note/1135606

  2. 洛谷 P2832 行路难

    题面 这个最短路有点special,会有疲劳度的加成效应,这个时候应该怎么办呢? 难就难在,如果走一条路比另一条路长,但是用的边少,那么这条路并不一定就更差. 我们要是能解决这个问题,就可以做出本题. ...

  3. Combine String HDU - 5707 dp or 广搜

    Combine String HDU - 5707 题目大意:给你三个串a,b,c,问a和b是不是恰好能组成c,也就是a,b是不是c的两个互补的子序列. 根据题意就可以知道对于c的第一个就应该是a第一 ...

  4. Linux创建删除文件和文件夹

    要想删除和创建,需要有root权限 [xwg@bogon ~]$ su root密码:[root@bogon xwg]# cd /home/a      切换到目录a[root@bogon a]# t ...

  5. SyntaxError: (unicode error) 'utf-8' codec can't decode byte 0xce in position 0: invalid continuatio

    点击  文档>>设置文件编码>>Unicode>>Unicode(UTF-8)

  6. Http协议三次握手和四次挥手

    TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: 位码即tcp标志位,有6种标示: SYN(synchronous建立联机) ACK(acknowledgemen ...

  7. Codeforces 1205C Palindromic Paths (交互题、DP)

    题目链接 http://codeforces.com/contest/1205/problem/C 题解 菜鸡永远做着变巨的梦 然而依然连div1BC题都不会做 要是那天去打cf怕是又要1题滚粗了.. ...

  8. codeforces#1187E. Tree Painting(树换根)

    题目链接: http://codeforces.com/contest/1187/problem/E 题意: 给出一颗树,找到一个根节点,使所有节点的子节点数之和最大 数据范围: $2 \le n \ ...

  9. break语句与continue语句

    break:终止该层循环: continue:跳过该层循环 注: ①:若这两个语句离开应用范围,存在是没有意义的. ②:这个两个语句后面都不能有语句,因为执行不到. ③:continue语句是跳过本次 ...

  10. 17.树的子结构 Java

    题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 思路 双递归:外层HasSubtree是一个先根遍历递归,内层isDirectSubTree是一个 ...