jdbc如何插入clob_让我们回顾一下如何通过JDBC插入Clob或Blob

jdbc如何插入clob

LOB是所有数据库以及JDBC中的PITA。 正确处理它们需要花费几行代码,并且可以确保最终会出错。 因为您必须考虑以下几点:

  • 首先,LOB是繁重的资源,需要特殊的生命周期管理。 分配LOB后,最好也“释放”它,以减轻GC的压力。 本文详细介绍了为什么需要释放吊球
  • 分配和释放吊球的时间至关重要。 它的寿命可能比ResultSetPreparedStatementConnection / transaction中的任何一个更长。 每个数据库都单独管理这样的寿命,在极端情况下,您可能必须阅读规格
  • 对于中小型LOB,您可以使用String而不是Clobbyte[]代替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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/337585.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

怎样做远程计算机控制系统,qq远程控制,怎样进行远程控制制作步骤

怎样设置qq远程控制&#xff1f;qq上有一个远程协助不少人都用过&#xff0c;但是这个远程小编建议不是认识的朋友&#xff0c;不要随便开放&#xff0c;很容易被窃取电脑资料&#xff0c;如果是不是很信得过有人&#xff0c;在申请协助时一定要自己盯着电脑&#xff0c;以防别…

pcl中ransac提取直线_复杂场景中的一个图像配准思路

在很多时候&#xff0c;我们可能需要使用到图像的识别与配准工作&#xff0c;来判断某个特征或者是划出某个特定特征的位置。现在的深度学习已经能够比较好地解决这个问题&#xff0c;比如常见的YOLO&#xff0c;可以利用几行设定代码就能够划出所需要识别的位置。但是精准度可…

js中使用camel框架_使用Fabric8在Kubernetes中使用Camel和CDI

js中使用camel框架序幕 我最近在博客上发表了使用CDI注入Kubernetes服务的信息 。 在本文中&#xff0c;我将更进一步&#xff0c;将Apache Camel带入图片。 因此&#xff0c;我将使用Camel的CDI支持来连接我的组件和路由&#xff0c;以及Fabric8的CDI扩展来自动将Kubernetes服…

程序员必知的10个C语言技巧

点击蓝字关注我们硬件设计师最常见的工作内容&#xff0c;就是通过写代码来测试硬件。这10个C语言技巧&#xff08;C语言仍然是常见的选择&#xff09;可以帮助设计师避免因基础性错误而导致某些缺陷的产生&#xff0c;并造成维护方面的困扰。为了成功的推出一个产品&#xff0…

一万字详解C语言中长度为零的数组

点击蓝字关注我们零长度数组概念&#xff1a;众所周知, GNU/GCC 在标准的 C/C 基础上做了有实用性的扩展, 零长度数组&#xff08;Arrays of Length Zero&#xff09; 就是其中一个知名的扩展.多数情况下, 其应用在变长数组中, 其定义如下&#xff1a;struct Packet {int state…

计算机网络自顶向下方法实验报告,计算机网络自顶向下方法试验三报告.doc

计算机网络自顶向下方法试验三报告陕西师范大学 计算机网络 实验报告年级&#xff1a; 2010级 姓名&#xff1a; 陈翠萍    学号&#xff1a;实验日期&#xff1a; 2012.9.24实验名称&#xff1a;Wireshark Lab: HTTP1至7题总的截图&#xff1a;1. Is your browser runnin…

app访问java web_Java Web App体系结构

app访问java web我曾经利用Servlet&#xff0c;JSP&#xff0c;JAX-RS&#xff0c;Spring框架&#xff0c;Play框架&#xff0c;带有Facelets的JSF和一些Spark框架。 以我的拙见&#xff0c;所有这些解决方案都远非面向对象和优雅的。 它们都充满了静态方法&#xff0c;不可测试…

电路中滤波电容和退耦电容_详解电源滤波电路中的高频滤波电容电路

图2-12所示是电源滤波电路中的高频滤波电路。电路中&#xff0c;一个容量很大的电解电容C1(2200F)与一个容量很小的电容C2(0.01F)并联&#xff0c;C2是高频滤波电容&#xff0c;用来进行高频成分的滤波&#xff0c;这种一大一小两个电容相并联的电路在电源电路中十分常见。1.高…

计算机驱动空间不够,Win8.1系统如何释放驱动器空间解决可用空间不足问题

现在越来越多用户安装升级win8.1系统&#xff0c;在操作使用过程中难免遇到一些奇奇怪怪的问题。相信有很多win8.1系统用户会遇到电脑的可用空间不足的提示&#xff0c;用户感到很疑惑&#xff0c;自己的电脑又没装什么软件怎么会这么提示。有什么办法可以解决此问题&#xff0…

python编程入门单例_Python单例模式实例详解

本文实例讲述了Python单例模式。分享给大家供大家参考&#xff0c;具体如下&#xff1a; 单例模式&#xff1a;保证一个类仅有一个实例&#xff0c;并提供一个访问他的全局访问点。 实现某个类只有一个实例的途径&#xff1a; 1&#xff0c;让一个全局变量使得一个对象被访问&a…

java 8入门与实践_30个Java入门技巧和最佳实践

java 8入门与实践Java是最流行的编程语言之一-无论是Win应用程序&#xff0c;Web应用程序&#xff0c;移动&#xff0c;网络&#xff0c;消费电子产品&#xff0c;机顶盒设备&#xff0c;Java随处可见。 在Java上运行的设备超过30亿。 据Oracle称 &#xff0c;正在使用50亿张J…

css中会计算的属性,2017年12月聚合文章--calc() ---一个会计算的css属性 | 码友网

最近这个月一直在赶项目开发&#xff0c;遇到的问题和学到的前端知识没有更新到博客园&#xff0c;现在闲了下来&#xff0c;就整理一下前端知识。在项目开发中&#xff0c;在样式这方面花费的时间较多&#xff0c;因为针对于数字的变化特别多&#xff0c;本人不爱记数字&#…

C/C++ 中公认的三个难点

点击蓝字关注我们C语言在嵌入式学习中是必备的知识&#xff0c;审核大部分操作都要围绕C语言进行&#xff0c;而其中有三块“难啃的硬骨头”几乎是公认级别的。0x01 指针指针公认最难理解的概念&#xff0c;也是让很多初学者选择放弃的直接原因。指针之所以难理解&#xff0c;因…

python 字符串分割_如何使用python语言split方法对不同字符串分割

在JavaScript中&#xff0c;可以使用split()将字符串分割成字符串数组&#xff1b;而在python语言中&#xff0c;split()方法也可以将字符串进行分割&#xff0c;分割之后的结果放置在列表中。下面利用几个实例说明split()方法的用法&#xff0c;操作如下&#xff1a;工具/原料…

java 拼图_功能项目拼图将Java 9引入

java 拼图因此&#xff0c;拼图项目...我们已经对此颇为了解&#xff0c;但尚未看到计划如何兑现其承诺的细节。 这篇文章将精确地做到这一点&#xff0c;并介绍项目的核心概念和功能。 系列 这篇文章是正在进行的有关拼图项目系列的一部分。 按照推荐的顺序&#xff08;不同于…

win7 蓝牙4.0 ble驱动_初识物联网无线通信技术之蓝牙4.0BLE协议栈

[本文属原创&#xff0c;转载请附上原文出处链接。]一、需要的软件工具1、BLE协议栈(BLE-CC254x-1.4.0)2、IAR开发软件(IAR Embedded Workbench8.20.2)注&#xff1a;1.4.0协议栈使用8.20.2的iar版本&#xff0c;1.3.2协议栈等使用的是8.10.4的iar版本。二、BLE协议栈安装目录下…

spring javaee_开发人员对Spring vs JavaEE的看法

spring javaee在Java社区中&#xff0c;Spring vs JavaEE是一个永无止境的争论。 在这样的辩论中&#xff0c;人们组成一个团体&#xff0c;由两个传播者&#xff0c;建筑师和一个平台的核心粉丝组成&#xff0c;并且不断进行辩论。 参与辩论的人可能是负责平台选择的架构师。 …

C语言:谈谈指针!

点击蓝字关注我们指针对于C来说太重要。然而&#xff0c;想要全面理解指针&#xff0c;除了要对C语言有熟练的掌握外&#xff0c;还要有计算机硬件以及操作系统等方方面面的基本知识。所以本文尽可能的通过一篇文章完全讲解指针。为什么需要指针&#xff1f;指针解决了一些编程…

C/C++ 中的 #pragma once 作用是什么?

点击蓝字关注我们1、#pragma once有什么作用&#xff1f;为了避免同一个头文件被包含&#xff08;include&#xff09;多次&#xff0c;C/C中有两种宏实现方式&#xff1a;一种是#ifndef方式&#xff1b;另一种是#pragma once方式。在能够支持这两种方式的编译器上&#xff0c;…

rowmapper_Spring Integration Jdbc RowMapper示例

rowmapperJDBC入站通道适配器的基本功能是执行SQL查询&#xff0c;提取数据并将以Message形式封装的结果集传递到本地通道。 您可以在JDBC入站通道适配器的示例中阅读有关此内容的更多信息。 有效负载的类型由行映射策略决定。 默认结果是产生类型为List的有效负载&#xff0c…