#Oracle Clob类型字段插入与更新

Oracle Clob类型字段插入与更新

(一)在oracle中,有一种类型叫做大对象类型,分为二进制的blob和字符型的char类型,用于存储字符串超过4000(varchar2的长度限制是4000字节)的字符串,代表性有前端的json样式。所以给我们带来了数据插入和更新的问题。当数据小于4000时,oracle自动将字符串转换为大对象类型,数据大于4000时,另做考略。
Oracle clob插入:讲解其中所碰到的坑,CLOB不能使用jdk自带clob,需使用OJDBC14.jar中所带CLOB.(导包为import oracle.sql.CLOB;)

	private static final String INSERT_SQL = "insert into COMPANY_TABLE VALUES(?,?,'公司','公司','T',?,'','','','',empty_clob(),empty_clob())";
	private static final String QUERY_SQL_NOTE = "select NOTE,ATTR from COMPANY_TABLE t where t.COMPANY_ID=? for update";
	private static final String UPDATE_SQL = "update COMPANY_TABLE t set NOTE=?,ATTR=? where t.COMPANY_ID=?";
			Conn=……取得数据库连接
			PreparedStatement pst = null;
			ResultSet rs = null;
			conn.setAutoCommit(false);// 设置不自动提交,开启事务
			pst = conn.prepareStatement(INSERT_SQL);
			pst.setString(1, "6666");
			pst.setString(2, companyName);
			pst.setString(3, avatar);
			pst.executeUpdate();
			pst = conn.prepareStatement(QUERY_SQL_NOTE);
			pst.setString(1, "6666");
			rs = pst.executeQuery();
			CLOB clob1 = null;
			CLOB clob2 = null;
			if (rs.next()) {
				clob1 = (CLOB) rs.getClob("NOTE");
				clob2 = (CLOB) rs.getClob("ATTR");
				clob1.setString(1, "112");
				clob2.setString(1, "212");
				PreparedStatement pstmt = conn.prepareStatement(UPDATE_SQL);
				pstmt.setClob(1, clob1);
				pstmt.setClob(2, clob2);
				pstmt.setString(3, "6666");
				pstmt.executeUpdate();
				pstmt.close();
			}
			conn.commit();

暂时真正用于实际开发的是这种方法,有其他方法也可以分享。
(二)此博客之前说及Oracle clob更新与插入同理,但通过实践后发现不成功,(一)中插入后能够更新成功原因是clob字段已设置为empty_clob()。在实际情况中clob字段的值有可能是为空的,所以引出修改更新clob的方法。

CLOB clob = oracle.sql.CLOB.createTemporary(conn, false, oracle.sql.CLOB.DURATION_SESSION);
			clob.setString(1L, user_icon);
			PreparedStatement pstmt = conn.prepareStatement(update_sql);
			pstmt.setClob(1, clob);
			pstmt.setString(2, user_id);
			pstmt.setString(3, user_no);
			pstmt.executeUpdate();
			pstmt.close();
			conn.commit();

以此更新之前的误—__—!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值