存取Oracle的大字符对象clob和blob

大字符对象CLOB一般用于存储字符数超过4000的字段,如富文本,这些包含了格式的内容很容易超过4000字符.

1.存储富文本时,一般含有很多尖括号这种特殊字符,如果不转换一下,很可能无法传递到后台,因为这些特殊字符让框架无法识别,解决办法是用URLEncoder编码一下,就能把这些特殊字符转义成能够正常传递的参数.

2.传递到后台后,直接保存有可能遇到数据库的特殊字符,而无法保存,因此要转换成另一种数据库能识别的字符,首先用URLEncoder解码还原,然后用HtmlUtils转码成数据库能识别的10进制字符或16进制字符,然后直接保存到数据库,只需要这样就行: =#{value,jdbcType=CLOB}

3.如何读取呢?直接和String类型一样读取即可,数据库中的16进制编码字符直接映射到String类型的java属性上.

4.读出来后,要用HtmlUtils解码还原,然后返回给前端即可.

5.如果遇到什么问题,记得转码,解码,一般都能解决.

大字节对象BLOB一般用于保存无法用字符表示,只能用字节表示的数据,如图片,视频,音频等.这些数据说白了就是二进制数据,而二进制数据在java中就是byte[]数组,在Oracle数据库中就是BLOB,只是叫法不一样.存取时,java中的byte[]类型对应于数据库的BLOB类型,这样BLOB类型就和普通类型有一样的操作方式了.

前端传图片,用MultipartFile类型接收后,可以从中通过getByte()方法获取到它的字节数组,然后直接把这个字节数组保存到BLOB类型的数据库字段上就行了.

读取时,也是直接把数据库的blob类型内容映射到byte[]类型的字段上就行了.java获取了byte[]类型后,可以写入到输出流中,进而生成图片,或者直接传给前台转换成图片.

总之一句话:CLOB和BLOB操作和普通类型没什么差别,只是前者要记得转码,后者要记得用byte[]类型.

猜你喜欢

转载自www.cnblogs.com/wangxuejian/p/11999898.html
今日推荐