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 字節限制。
// 存入
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);
| 維度 | 直接存 JSON | Base64 編碼 |
|---|---|---|
| 實現複雜度 | 低 | 略高(編解碼) |
| 特殊字符風險 | 依賴驅動轉義 | 無(安全字符集) |
| 可讀性 | SQL 工具直接可讀 | 需解碼查看 |
| 空間開銷 | 1x | ~1.33x |
| 長度限制 | 4000 字符 | 同,但可存更長原始數據 |
// 表結構
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());
JSON_VALUE, JSON_QUERY 直接 SQL 查詢JSON 本質是字符串,存入 VARCHAR2 只需處理長度與特殊字符,Base64 是通用保險方案。