在Oracle中使用JDBC插入功能

介绍

在本文中,我将显示一个示例,说明如何使用Oracle支持的JDBC批量插入功能,这些功能特定于Oracle。

有关为什么可能希望一般使用批量插入的更多详细信息,例如,在某些情况下需要考虑性能,请参阅Joormana Brahma于2015年4月12日发表的JCG文章“ JDBC Batch Insert Example ”。

Brahma女士提供了3个示例,说明如何使用MySQL在JDBC中完成此功能,但是我在本文中展示的特定于Oracle的方式可以看作是她的第二个示例与第三个示例之间的交叉,例如,PreparedStatement之间的混合和批处理批次。

Oracle安装程序

为了利用本例中显示的支持JDBC批量插入的Oracle特定功能,您首先需要在Oracle数据库中创建几个用户定义的类型。

第一种类型映射到表中要批量插入的记录,第二种类型映射到第一种类型的变量数组。 换句话说,您可以将第一种类型视为表中的一行,而第二种类型只是这些行的数组。

您将使用支持JDBC批量操作的Oracle特定功能将这个数组批量插入表中,本文将对此进行演示。

因此,在此示例中创建的第一件事是Oracle中的表( 请参见下面的清单1 )。

DROP TABLE "SYSTEM"."EMPLOYEE";
CREATE TABLE "SYSTEM"."EMPLOYEE" (  "FIRST_NAME" VARCHAR2(20 BYTE), "LAST_NAME" VARCHAR2(20 BYTE),"EMP_NO" NUMBER, "JOIN_DATE" DATE) 
TABLESPACE "SYSTEM" ;

清单1.用于创建“ Employee”表的DDL

该表是HR模式中Employees表的简化版本,Oracle在Application Express中将其用作示例。 请注意,清单1中的示例是由System用户创建的-对于实际使用而言并不现实,但是在这里满足我们的目的就足够了,例如,除了varchar2之外,在数字和日期等字段中还混合了SQL类型。

接下来,我们需要创建一个用户定义的类型,该类型映射到该表中的行( 请参见下面的清单2 ),例如,请注意,它与清单1中的Employee表中的字段具有直接关系。

create or replace
TYPE t_type AS OBJECT (first_name varchar2(20),last_name varchar2(20),emp_no number,join_date date
);

清单2.创建“ t_type ”对象的PL / SQL

然后,我们需要创建另一个用户定义的类型,该类型映射到第一个类型的变量数组( 请参见下面的清单3 )。

create or replace
type tb_t_type
as varray (1000000) of t_type;

清单3.创建“ tb_t_type ”对象的PL / SQL

请注意,此处定义的数组最大大小为100万。 您可以调整此大小以适合自己的需求(当然,在您自己的资源限制内),但是我们确实会在这里的JDBC示例中批量插入100万条记录。

最后,我们将需要创建由批量操作调用的存储过程( 请参见下面的清单4 )。

create or replace
procedure add_employees (emparray in tb_t_type) asbeginforall i in emparray.first .. emparray.lastinsert into EMPLOYEE( first_name,                last_name,emp_no,join_date )values( emparray(i).first_name,emparray(i).last_name,emparray(i).emp_no, emparray(i).join_date );end add_employees;

清单4.创建“ add_employees”存储过程的PL / SQL

请注意,在此PL / SQL中使用了forall习惯用法,这使得实际的大容量插入操作比仅使用普通香草“ for循环”时可能的情况快了大约一半数量级。 特别是在我自己的演示运行,我已经注意到了forall成语产生的结果这是大约快5倍。

注意:在此示例中,我已在运行Windows 7 Home Premium的Dell笔记本电脑上使用Oracle Database Express Edition 11g第2版,该笔记本电脑具有Intel i5处理器@ 1.7GHz,8GB RAM。 对于Oracle JDBC驱动程序,我使用了ojdbc6.jar

JDBC

完成Oracle设置后,现在我们来看看如何利用支持JDBC批量插入操作的Oracle特定功能( 请参见下面的清单5 )。

图片1

清单5. Java示例,说明支持JDBC批量插入操作的Oracle特定功能

分析

请注意第2-4行的import语句,即,它们是ojdbc6.jar定义的特定于Oracle的类型,这在本示例前面提到的就是利用特定于Oracle的功能进行JDBC批量插入。

如第12行的注释所示,要做的第一件事是获取我们的数据源。 请注意,对于第14-16行,您将需要用自己的值代替主机,端口和服务ID(“ sid”),尽管如果使用默认端口,则仅为1521。

在第22-23行,我们定义了一个Oracle STRUCT数组,该数组映射到我们先前在Oracle数据库中创建的用户定义类型“ tb_t_type ”( 请参见清单3 )。 同样在第22行,我们从命令行获取此变量数组的大小,即,在大容量插入操作中以100万条记录运行此示例,如下所示:

java OraBulk 1000000

在第26行,我们定义了Oracle struct描述符,该描述符映射到我们先前在Oracle数据库中创建的用户定义类型“ t_type ”( 请参见清单2 )。

接下来在第29-31行,我们准备准备批量插入的记录数组。 在此示例中,完成操作的方式有些人为设计,例如,雇员的加入日期只是该元素在循环中被迭代的时间,尽管有其技巧,但对于我们的目的来说已经足够了。

在第35-36行,我们定义了Oracle数组描述符,该描述符映射到用户定义的类型“ tb_t_type ”( 请参见清单3 ),并通过引用在第23行中定义的Oracle结构来实例化Oracle数组。

在完成所有先决条件工作之后,接下来我们在第39行创建Oracle预准备语句,以引用我们先前在Oracle数据库中定义的存储过程( 请参见清单4 )。 然后,它将Oracle数组设置为其第一个参数( 请参见第40行 )。

最后,在完成所有设置后,我们在第43行几乎没有大张旗鼓地执行了准备好的语句。

完成主要事件后,第46-48行的反高潮限制是强制提交和关闭以释放资源。 请注意,如果在批量插入期间发生异常,那么所有内容都会被回滚,因为默认情况下自动提交将处于关闭状态。

摘要

在我的基准测试运行中,在运行Windows 7 Home Premium的Dell笔记本电脑上,使用此代码在Oracle Database Express Edition 11g第2版中批量插入1百万条记录的时间为12.55秒,该笔记本电脑具有Intel i5处理器@ 1.7GHz和8GB RAM。 对于Oracle JDBC驱动程序,我使用了ojdbc6.jar

  • 您可以下载代码和样品PL / SQL 这里的JCG

翻译自: https://www.javacodegeeks.com/2015/12/using-the-jdbc-insert-features-in-oracle.html

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

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

相关文章

Vue+ECharts的小示例

VueECharts做数据可视化1. Vue Vue 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现…

汇编学习笔记(3)-80x86指令集

前言 (1)指令的一般格式 [标号:] 助记符 [操作数1 , [操作数2]] [; 注释] 一行一条指令 助记符就是指令的名称,每条指定必定有个助记符。 助记符前面的标号是给汇编编译器看的,由我们自己取名,一般取表示本…

osg 三维gis开发_三维GIS平台的可视化应用 (下)

上一篇主要对三维GIS的基础数据和三维模型进行了一点说明,本篇将接着聊剩下的部分,主要是三维GIS平台能够支持什么样的场景展示,并来对平台的应用进行一些介绍。没看过上篇的朋友可以先了解一下再看本篇:MonoLog:三维G…

前端HTML介绍

一、HTML简介HTML定义:  超级文本标记语言是标准通用标记语言下的一个应用,也是一种规范,一种标准,它通过标记符号来标记要显示的网页中的各个部分。网页文件本身是一种文本文件,通过在文本文件中添加标记符&#xff…

solr创建索引_Solr:创建拼写检查器

solr创建索引在上一篇文章中,我谈到了Solr Spellchecker的工作原理,然后向您展示了其性能的一些测试结果。 现在,我们将看到另一种拼写检查方法。 与其他方法一样,此方法使用两步过程。 相当快速的“候选单词”选择,然…

带有Javaslang的Java 8中的功能数据结构

Java 8的lambda(λ)使我们能够创建出色的API。 它们令人难以置信地提高了语言的表达能力。 Javaslang利用lambda来基于功能模式创建各种新功能。 其中之一是功能性集合库,旨在替代Java的标准集合。 (这只是鸟瞰图,您…

丰田pcs可以关闭吗_丰田车必备的配置有哪些是在亚洲龙上体现了?

亚洲龙基于丰田TNGA架构下的GA-K平台打造而来,与雷克萨斯ES一致,先期推出搭载2.5L自然吸气发动机以及2.5L混合系统的车型。作为一汽丰田的全新旗舰轿车,亚洲龙主销车型配备丰田TSS规避碰撞辅助套装,英文全拼为 “Toyota Safety Se…

[NOIP2014]飞扬的小鸟

思路{ 对于每一列,小鸟或下落,或上升。那我们很容易想到对应的背包问题! 按照完全背包的思想更新上升部分,01背包的方法更新下降部分。 撞到柱子了(aluba。。。。。。aluba.。。。。。)不慌,只需把它设为不可打即可&am…

在自定义Java 9映像上运行Eclipse Neon

我已经开始修改自定义Java二进制运行时映像文件。 映像文件是打包为运行时平台的模块的配置。 基本上,默认映像包含组成Java运行时的所有内容。 自定义图像可以包含该图像的一些子集。 例如,我创建了一个仅包含“ compact 3”概要文件的映像&#xff0c…

如何以访客模式访问_重新访问了访客模式

如何以访客模式访问访客模式是面向对象设计中最被高估但又被低估的模式之一。 高估了它,因为它通常选择得太快了( 可能是由建筑宇航员选择的 ),然后以错误的方式添加后,使原本非常简单的设计肿了。 如果您不遵循教科书…

【数据挖掘导论】——数据质量

数据质量数据挖掘使用的数据一般是为其它用途收集或者收集的时候还没有明白目的。因此数据经常不能在数据的源头控制质量。为了避免数据质量的问题,所以数据挖掘着眼于两个方面:数据质量问题的检測和纠正(数据清理);使…

Spark学习笔记(7)---Spark SQL学习笔记

Spark SQL学习笔记 Spark SQL学习笔记设计到很多代码操作,所以就放在github, https://github.com/yangtong123/RoadOfStudySpark/blob/master/src/com/spark/sql/Readme.md其中包括了对Spark2.0的新特性的介绍,包括SparkSession, DataSet等转载于:https:…

性能实战(一) --- clock_gettime造成系统整体cpu过高定位过程

问题背景 有一台linux服务器测试环境cpu经常到达80%,造成系统卡顿,部分功能不可用. 分析步骤 1.使用perf制作cpu火焰图 通过制作cpu火焰图,发现很多进程都存在大量的clock_gettime系统调用. 2. 使用bcc工具funclatency`进一步查看clock_gettime的调用次数 # /usr/share/bc…

玩透个人所得税

每次拿着工资条的时候,总有个代扣个税这么一项,不知道你们有没有想过这到底是怎样计算得出来的。下面我就给你们普及一下这个知识。 个人所得税 个人所得税是对个人(自然人)取得的各项所得征收的一种所得税。个人所得税…

哔哩哔哩swot分析_哔哩哔哩2020校园招聘游戏运营笔试真题

在前不久《英雄联盟》S9世界大赛总决赛上,中国FPX战队以3:0横扫欧洲G2最终夺得S9世界冠军,国内玩家万分激动。总决赛刚结束不久,B站以8亿元价格拍得《英雄联盟》全球总决赛中国地区三年独家直播版权。作为主打年轻人群体起家的产品…

P2280 [HNOI2003]激光炸弹

P2280 [HNOI2003]激光炸弹 题目描述 输入输出格式 输入格式:输入文件名为input.txt 输入文件的第一行为正整数n和正整数R,接下来的n行每行有3个正整数,分别表示 xi,yi ,vi 。 输出格式:输出文件名为output.…

在Spring Boot中使用配置元数据来配置您的配置

Spring Boot 1.3.0中发布了许多更新,但是其中一个对我很突出,因为我以前并不了解此更新,它的状态使其成为一项真正有用的功能(不幸的是,撰写本文时仅在Spring Boot中可用)这个)。 我正在谈论配置…

jsp实现数据禁用和只读

jsp实现数据禁用和只读

java事务不生效场景_讲一下,我最近帮忙面试的几个“高级”JAVA,真的心累

最近看了很多简历,很多候选人年限不小,但是想着也不能通过简历就直接否定一个人,何况现在大环境越来 越难,大家找工作也不容易,于是就打算见一见。在沟通中发现,由于年限不小,他们的定位基本都是…

antlr 教程_ANTLR教程– Hello Word

antlr 教程Antlr代表另一种语言识别工具。 该工具能够为任何计算机语言生成编译器或解释器。 除了明显的用途(例如需要解析一种真正的“大型”编程语言,例如Java,PHP或SQL)外,它还可以帮助执行更小,更常见的…