Java更新Oracle的clob类型字段
Java更新Oracle的clob类型字段
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类型字段的更多相关文章
- .Net处理Oracle中Clob类型字段总结
最近在做项目中用到Clob这个字段,Clob是存储无限长字符的Oracle字段,用的时候网上找资料找了好久,内容不是很多,大部分都不能用,当然也有可以用的,测试了不同版本,整理了一下,给大家在做项目的 ...
- java、oracle对CLOB处理
oracle CLOB字段转换位VARCHAR 1.实际上处理CLOB字段的时候,直接TO_CHAR,当长度超过4000的时候,会报错,提示列被截取: CLOB转varchar2:select to_ ...
- Spring JDBC处理CLOB类型字段
以下示例将演示使用spring jdbc更新CLOB类型的字段值,即更新student表中的可用记录. student表的结构如下 - CREATE TABLE student( ID INT NOT ...
- Oracle中Clob类型处理解析
最近利用NHibernate映射类型为Clob字段在插入数据时发现当字符的字节数(一个半角字符一个字节,一个全角字符两个字节)在2000-4000之间时报错(ORA-01461:仅可以插入LONG列的 ...
- Oracle中Clob类型处理解析:ORA-01461:仅可以插入LONG列的LONG值赋值
感谢原作者:破剑冰-Oracle中Clob类型处理解析 上一篇分析:ORA-01461: 仅能绑定要插入 LONG 列的 LONG 值 最近为Clob字段在插入数据时发现当字符的字节数(一个半角字符一 ...
- Oracle中Clob类型处理解析 (转)
转:原文:http://blog.csdn.net/pojianbing/article/details/2789426 最近利用NHibernate映射类型为Clob字段在插入数据时发现当 ...
- ORACLE插入DATE类型字段
1 怎样在ORACLE中输入DATE类型的字段 insert into table_name (date_column) values(to_date('2006-06-04','yyyy-mm-dd ...
- Java 存储和读取 oracle CLOB 类型字段的实用方法
import java.io.BufferedReader; import java.io.IOException; import java.io.Reader; import java.io.Str ...
- oracle中关于clob类型字段的查询效率问题
今天,公司项目某个模块的导出报如下错误: HTTP Status 500 – Internal Server Error Type Exception Report Message Handler d ...
随机推荐
- 漫谈计算机编码:从ASCII码到UTF-8
第一阶段 盘古开天辟地——ASCII码 计算机大家都知道,本质是二进制运算和存储.在计算机中人类的几乎所有文字和字符都没法直接表示,所以美国人在发明计算机的时候为了让计算机可以用于保存和传输文字,就发 ...
- 如何利用新浪官方的短网址API接口实现T.cn短链接的压缩生成
短网址的实现原理就是有一个数据表会配置文件将短网址和实际网址进行对应,当请求某个短网址时,程序跳转到对应的实际网址上去,从而实现网址的访问.目前国内最稳定最好用的是新浪T.cn短链接. 之前新浪提供了 ...
- centos与debian网卡
debian /etc/network/interfaces # This file describes the network interfaces available on your sys ...
- 第二届强网杯部分题writeup
0x00 题目名称 签到 操作内容: FLAG值: flag{welcome_to_qwb} 0x01 题目名称 Weclome 操作内容: 通过查看文件发现是一个bmp格式的图片文件,然后加上后 ...
- 单调队列优化dp,k次移动求最长路
洛谷2254 给你k次移动 每次移动给你一个时间段 a,b和方向dir 地图上有障碍物 为了不撞上障碍物你可以施法让箱子停下来 问箱子可以走的最长路 ((以下是洛谷的题解)) /*首先考虑对于时间t来 ...
- LeetCode 简化路径(探索字节跳动)
题目描述 给定一个文档 (Unix-style) 的完全路径,请进行路径简化. 例如, path = "/home/", => "/home" path ...
- [BTS] BizTalk WCF-SQL Adapter 高级应用
9102年岁尾,41岁的我居然还在搞 BizTalk,感觉就是一种悲伤. 国内用户少之又少,能坚持一直在使用的“忠实”用户那就更少了. 不是它不好用,而是微软全线转向云服务,这个产品也已经快10年没有 ...
- vscode在软件内部查看html渲染效果的插件
使用方法: Usage press 'F1' and type "Show Live Server Preview" F1,然后输入Show Live Server Preview ...
- [面试] Java高级软件工程师面试考纲(转)
如果要应聘高级开发工程师职务,仅仅懂得Java的基础知识是远远不够的,还必须懂得常用数据结构.算法.网络.操作系统等知识.因此本文不会讲解具体的技术,笔者综合自己应聘各大公司的经历,整理了一份大公司对 ...
- Hibernate3核心API简介-Transaction接口
代表一次原子操作,它具有数据库事务的概念.所有持久层都应该在事务管理下进行,即使是只读操作. Transaction tx = session.beginTransaction();常用方法:c ...