向数据库中插入 CLOB 或 BLOB 类型的数据,Oracle 总是比其他类型的数据库操作上要麻烦多了。当然,对于不大于 4K 长度的 CLOB 字符串在 JDBC 中可简单的用 PreparedStatement.setString(idx, "short string")
。如果要插入大于 4K 长度的内容,网上找来的例子许多都是分两步走
- 先插入 EMPTY_CLOB() 或 EMPTY_BLOB()
- 然后 SELECT 原来的记录
FOR UPDATE
, 再更新先前插入的记录
这就存在两个问题,含 CLOB/BLOB 的表必需要有主键,还有因为 FOR UPDATE
的使用我们需要开启事物,不能采用自动提交。
其实还有更简单的方法可直接插入大的 CLOB/BLOB 数据,要用到 Oracle JDBC 驱动的 setStringForClob(), CLOB.createTemporary(), 或 BLOB.createTemporary() 方法。来看下面的例子,例子中只演示 CLOB, 类似的方法可应用于 BLOB, NCLOB。
本文中所使用的 Oracle JDBC 驱动比较老,是 ojdbc:ojdbc:5。Docker 启动一个本地的 Oracle 11G 作为测试数据库
$ docker run -d -p 1521:1521 -p 8080:8080 wnameless/oracle-xe-11g-r2
默认的 SID 是 xe, 数据库用户名和密码分别是 system/oracle 阅读全文 >>