jdbc如何插入clob_让我们回顾一下如何通过JDBC插入Clob或Blob
jdbc如何插入clob
LOB是所有数据库以及JDBC中的PITA。 正确处理它们需要花费几行代码,并且可以确保最终会出错。 因为您必须考虑以下几点:
- 首先,LOB是繁重的资源,需要特殊的生命周期管理。 分配LOB后,最好也“释放”它,以减轻GC的压力。 本文详细介绍了为什么需要释放吊球
- 分配和释放吊球的时间至关重要。 它的寿命可能比
ResultSet
,PreparedStatement
或Connection
/ transaction中的任何一个更长。 每个数据库都单独管理这样的寿命,在极端情况下,您可能必须阅读规格 - 对于中小型LOB,您可以使用
String
而不是Clob
或byte[]
代替Blob
,但这可能并非总是如此,甚至可能会导致一些令人讨厌的错误,例如Oracle可怕的ORA-01461:可以绑定LONG值仅用于插入LONG列
因此,如果您正在使用JDBC进行低级工作(而不是通过Hibernate或jOOQ抽象JDBC),则最好编写一个小型实用程序来处理正确的LOB处理。
最近,我们至少在某些数据库中重新发现了用于jOOQ集成测试的自己的实用程序,并认为这对于直接使用JDBC的一些读者可能非常有用。 考虑以下类别:
public class LOB implements AutoCloseable {private final Connection connection;private final List<Blob> blobs;private final List<Clob> clobs;public LOB(Connection connection) {this.connection = connection;this.blobs = new ArrayList<>();this.clobs = new ArrayList<>();}public final Blob blob(byte[] bytes) throws SQLException {Blob blob;// You may write more robust dialect // detection hereif (connection.getMetaData().getDatabaseProductName().toLowerCase().contains("oracle")) {blob = BLOB.createTemporary(connection, false, BLOB.DURATION_SESSION);}else {blob = connection.createBlob();}blob.setBytes(1, bytes);blobs.add(blob);return blob;}public final Clob clob(String string) throws SQLException {Clob clob;if (connection.getMetaData().getDatabaseProductName().toLowerCase().contains("oracle")) {clob = CLOB.createTemporary(connection, false, CLOB.DURATION_SESSION);}else {clob = connection.createClob();}clob.setString(1, string);clobs.add(clob);return clob;}@Overridepublic final void close() throws Exception {blobs.forEach(JDBCUtils::safeFree);clobs.forEach(JDBCUtils::safeFree);}
}
这个简单的类有一些不错的款待:
- 它是
AutoCloseable
,因此您可以使用try-with-resources语句释放您的吊球 - 它抽象了跨SQL方言创建LOB的过程。 无需记住Oracle的方式
要使用此类,只需编写如下内容:
try (LOB lob = new LOB(connection);PreparedStatement stmt = connection.prepareStatement("insert into lobs (id, lob) values (?, ?)")
) {stmt.setInt(1, 1);stmt.setClob(2, lob.clob("abc"));stmt.executeUpdate();
}
而已! 无需保留对lob的引用,如果它不为null,则可以安全地释放它,可以从异常中正确恢复,等等。只需将LOB
容器与PreparedStatement
一起放入try-with-resources语句中即可。
如果您对为什么必须首先调用Clob.free()
或Blob.free()
,请阅读有关它的文章 。 这将为您OutOfMemoryErrors
一两个OutOfMemoryErrors
翻译自: https://www.javacodegeeks.com/2015/04/lets-review-how-to-insert-clob-or-blob-via-jdbc.html
jdbc如何插入clob
jdbc如何插入clob_让我们回顾一下如何通过JDBC插入Clob或Blob相关推荐
- mysql插入10万测试_[原创]java使用JDBC向MySQL数据库批次插入10W条数据测试效率
使用JDBC连接MySQL数据库进行数据插入的时候,特别是大批量数据连续插入(100000),如何提高效率呢? 在JDBC编程接口中Statement 有两个方法特别值得注意: 通过使用addBatc ...
- jdbc批量插入的4种方式【百万条数据插入只需几秒】
mysql数据库准备 #打开数据库test01; use test01; #创建表a,表a包含int型的id列.可变长度型的name[长度20个字符] create table a (id INT,N ...
- 通过JDBC和Hibernate对Clob和Blob的操作
通过JDBC和Hibernate对Clob和Blob的操作,插入和读取. 一,JDBC方式: 1,当lob的内容很小的时候,用sta.setString(2, "clob content&q ...
- jdbc连接sqlserver报错java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLServerDriver...
使用2008的数据库, 我已经引入的sqljdbc4的包,单还是报这个错,很奇怪突然想到在配置hibernate的时候,是拷贝下来的代码 然后到网上查了下, 因为是2008的版本驱动和2000的有点不 ...
- JDBC学习笔记02【ResultSet类详解、JDBC登录案例练习、PreparedStatement类详解】
黑马程序员-JDBC文档(腾讯微云)JDBC笔记.pdf:https://share.weiyun.com/Kxy7LmRm JDBC学习笔记01[JDBC快速入门.JDBC各个类详解.JDBC之CR ...
- 表的插入、更新、删除、合并操作_2_插入含自增列的记录
插入含自增列的记录 需求描述 需求:向dept表中插入部门编号为50,部门名称为Production,部门位置为Shanghai的数据. 解决方法:这里通过INSERT INTO TableName ...
- mysql不存在就批量新增_mysql批量插入,存在则修改,不存在则插入
批量插入,存在则修改,不存在则插入 INSERT INTO 表名 (字段1,字段2,字段3,字段4) VALUES (字段1值,字段2值,字段3值,字段4值) ON DUPLICATE KEY UPD ...
- SQLite在指定列后面插入字段_个人学习系列 - 防止MySQL重复插入数据
新建表格 CREATE TABLE `person` (`id` int NOT NULL COMMENT '主键',`name` varchar(64) CHARACTER SET utf8 COL ...
- 插入模板_WordPress在文章列表和内容页插入广告
本文已同步到专业技术网站 www.sufaith.com, 该网站专注于前后端开发技术与经验分享, 包含Web开发.Nodejs.Python.Linux.IT资讯等板块. 一.在文章列表插入广告 文 ...
最新文章
- c语言实现 十进制到二进制的转换
- html 视频兼容苹果,video苹果兼容flash播放
- 操作系统(六)系统调用
- Ubuntu下Topcoder配置
- R-FCN+ResNet-50用自己的数据集训练模型(python版本)
- 四针手表指的是什么_1000~1500元的男士手表推荐
- web应用的目录结构
- Shortcut setting in Webclient UI
- java序列化kr_序列化专用列表
- mysql int 转string_mysql的这些坑你踩过吗?快来看看怎么优化mysql
- 51Nod-2149 字符串出现位置【水题】
- Docker 多模块打包启动(kitty-generator)
- android地图搜索功能,[Android]百度地图POI检索
- 实施工程师职业的前景和发展思考
- <零售数据分析-Pandas> 通过环比销售和库存对产品进行分类
- oppoa5降级教程_OPPO A5官方原厂固件rom刷机包_全量系统降级包回退包下载A.14版
- 硬盘分区形式之MBR、GPT
- 2021/08/09模拟赛总结
- 微信小程序iphone11 wx.openBluetoothAdapter 返回状态10001 当前蓝牙适配器不可用
- Code Review 在丁香医生前端团队的实践