示範使用 PreparedStatement 操作 Oracle CLOB 欄位,包含插入空 CLOB 後寫入字串、查詢讀取子字串、以及使用 DBMS_LOB.getlength 驗證資料長度。
clobtest_table (
id VARCHAR2(10),
picstr CLOB
)
conn.setAutoCommit(false);
// 先插入空 CLOB
String sql = "insert into clobtest_table(id, picstr) values(?, empty_clob())";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, "001");
pstmt.executeUpdate();
// 查詢回該筆 CLOB 定位器
pstmt = conn.prepareStatement("select picstr from clobtest_table where id = '001' for update");
ResultSet rs = pstmt.executeQuery();
oracle.sql.CLOB clob = null;
if (rs.next()) clob = (oracle.sql.CLOB) rs.getClob(1);
// 寫入字串內容
Writer wr = clob.getCharacterOutputStream();
wr.write(strContent);
wr.flush();
wr.close();
rs.close();
conn.commit();
SQL> select dbms_lob.getlength(picstr) from clobtest_table;
String sql = "select picstr from clobtest_table where id = '001'";
pstmt = conn.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery();
if (rs.next()) {
oracle.sql.CLOB clob = (oracle.sql.CLOB) ((oracle.jdbc.driver.OracleResultSet)rs).getClob(1);
if (clob == null || clob.length() == 0) {
System.out.println("CLOB 為空");
} else {
String content = clob.getSubString(1, (int)clob.length());
System.out.println(content);
}
}
empty_clob() 插入空定位器,再 for update 查詢取得可寫入的 CLOB 物件。getCharacterOutputStream() 寫入字元資料,getSubString() 讀取。oracle.sql.CLOB 或 OracleResultSet 存取專有 API。