首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

JSON 數據存入 Oracle VARCHAR2 字段:直接寫入與 Base64 編碼兩種方案

     編輯:程式設計綜合問答

場景

Java 應用需將 JSON 字符串存入 Oracle 表的 VARCHAR2 字段 logo_data。

方案一:直接寫入(簡單,注意長度與特殊字符)


String json = "{\"name\":\"張三\",\"age\":25}";
// 確保字段長度足夠:VARCHAR2(4000) 或 CLOB
PreparedStatement ps = conn.prepareStatement("INSERT INTO t (logo_data) VALUES (?)");
ps.setString(1, json); // JDBC 驅動自動處理引號轉義
ps.executeUpdate();

注意:JSON 中包含單引號、反斜杠等特殊字符,JDBC setString 會自動轉義,但極長 JSON 可能超過 4000 字節限制。

方案二:Base64 編碼存儲(推薦,規避特殊字符/編碼問題)


// 存入
String json = "{\"data\":\"包含'單引號\"和\\反斜杠\"}";
String encoded = Base64.getEncoder().encodeToString(json.getBytes(StandardCharsets.UTF_8));
ps.setString(1, encoded); // 純字母數字+/=,極安全

// 讀取
String encoded = rs.getString("logo_data");
String json = new String(Base64.getDecoder().decode(encoded), StandardCharsets.UTF_8);

方案對比

維度直接存 JSONBase64 編碼
實現複雜度低略高(編解碼)
特殊字符風險依賴驅動轉義無(安全字符集)
可讀性SQL 工具直接可讀需解碼查看
空間開銷1x~1.33x
長度限制4000 字符同,但可存更長原始數據

大數據量:改用 CLOB


// 表結構
CREATE TABLE t (id NUMBER, logo_data CLOB);

// 寫入
Clob clob = conn.createClob();
clob.setString(1, json); // 或流式寫入
ps.setClob(1, clob);

// 讀取
Clob clob = rs.getClob("logo_data");
String json = clob.getSubString(1, (int) clob.length());

最佳實踐建議

  1. 優先 Base64 + VARCHAR2:簡單、安全、無編碼坑
  2. 超長 JSON 用 CLOB:突破 4000 限制
  3. 查詢需求用 JSON 函數:Oracle 12c+ 支持 JSON_VALUE, JSON_QUERY 直接 SQL 查詢
  4. 字符集統一 UTF-8:Java、JDBC、DB、表字段全鏈路 UTF-8

JSON 本質是字符串,存入 VARCHAR2 只需處理長度與特殊字符,Base64 是通用保險方案。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved