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数据库的时候被转义。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值