日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

oracle数据库的大字段,Oracle数据库大字段问题

發布時間:2023/12/20 数据库 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle数据库的大字段,Oracle数据库大字段问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Oracle數據庫大字段問題

問題描述:字段內容長度超4000

最近項目中存在用某些字段存預處理sql語句,最初,項目此類型字段用varchar2(4000),但隨著項目跟進到二期,牽連的表越來越多,存在預處理索引,中間臨時表的問題,預處理SQL字段長度超過4000。

oracel默認varchar2類型是不能超過4000的

我們都知道,oracel默認varchar2類型是不能超過4000的,如果類型超過4000的數據插入會自動轉為long型數據插入,所以問題來了。

所以我將表中需要超過4000內容的字段該文long型,接下來問題又來了。

oracle一個表中最多只能有一個long型字段

我們又知道,oracle一個表中最多只能有一個long型字段,所以這種解決方案又不適合解決業務需求了,經查詢oracle推薦用clob字段類型存儲。

這里需要簡單普及一下clob和blob的知識:CLOB(Character Large Object) 字符大對象,Blob(Binary Large Object)二進制大對象。

由字面意思可以簡單的辨別根據需求選擇不同的對應類型,我們項目中這個字段全是文字形式的預處理sql,所以選擇了clob,如果在遇到文件、視頻、音頻等可以選擇blob哈。

好吧,既然oracle推薦使用這種clob方式存儲超4000的字符內容,那我就選擇唄。

接下來問題又來了:這是一種對象存儲方式,如何存取呢?

簡單的舉個栗子吧:

為了使用方便我們肯定要進行數據封裝,簡單寫個類似bean

Class User

Clob sqla;

Clob sqlb;

以及對應的set get方法。

我們在遍歷查詢結果集ResultSet的時候將對應的結果user.setClob(rs.getClob(“sqla”));

因為我們要用clob里面的內容信息,將Clob轉為String使用唄

這就對了塞。在user對象能存儲進sqla這個clob對象了吧,是我們就將其取出來用唄,

簡單測試一下System.out.println(user.getSqla().toString());

這我們都知道,這打印出來是對象地址對吧。

查詢了下怎么將clob轉String,我在用的時候將clob轉為String使用唄,就查了一下寫工具類,方便使用的時候調用

public static String clobToString(CLOB clob) throws SQLException, IOException {

result clob != null ? clob.getSubString(1, (int) clob.length()): null;

}

當jdbc返回給我user對象后我在使用的地方調用clobToString(user.getSqls()),拋出的異常是:連接數據庫才能操作。

寫了一個stringToClob(String string) 方法返回Clob對象,關鍵代碼如下:

new javax.sql.rowset.serial.SerialClob(s.toCharArray());這就是將字符串變為char數組利用jdbcApi轉換。

在使用的地方調用同樣報出需要連接數據庫才能操作。

所以經研究發現,在jdbc外面String與clob互轉是會出錯的。

整文的核心:將轉換代碼在jdbc 操縱是使用。

總結

以上是生活随笔為你收集整理的oracle数据库的大字段,Oracle数据库大字段问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。