大字符對象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[]類型.