日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

在Oracle中使用JDBC插入功能

發布時間:2023/12/3 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在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 )。

清單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

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的在Oracle中使用JDBC插入功能的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。