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数据库大字段问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: wingdings字体符号在哪_wing
- 下一篇: Android 10.0 根据包名授予读