當前位置:首頁 » 編程語言 » sqldb2oracle

sqldb2oracle

發布時間: 2022-08-03 03:57:45

1. Oracle,db2是什麼

Oracle和DB2是兩種不同的資料庫
Oracle:
Oracle是甲骨文公司的一款關系資料庫管理系統。
ORACLE資料庫系統是美國ORACLE公司(甲骨文)提供的以分布式資料庫為核心的一組軟體產品,是目前最流行的客戶/伺服器(CLIENT/SERVER)或B/S體系結構的資料庫之一。比如SilverStream就是基於資料庫的一種中間件。ORACLE資料庫是目前世界上使用最為廣泛的資料庫管理系統,作為一個通用的資料庫系統,它具有完整的數據管理功能;作為一個關系資料庫,它是一個完備關系的產品;作為分布式資料庫它實現了分布式處理功能。
DB2:
全稱為IBM DB2。是美國IBM公司開發的一套關系型資料庫管理系統,它主要的運行環境為UNIX(包括IBM自家的AIX)、Linux、IBM i(舊稱OS/400)、z/OS,以及Windows伺服器版本。
DB2主要應用於大型應用系統,具有較好的可伸縮性,可支持從大型機到單用戶環境,應用於所有常見的伺服器操作系統平台下。 DB2提供了高層次的數據利用性、完整性、安全性、可恢復性,以及小規模到大規模應用程序的執行能力,具有與平台無關的基本功能和sql命令。DB2採用了數據分級技術,能夠使大型機數據很方便地下載到LAN資料庫伺服器,使得客戶機/伺服器用戶和基於LAN的應用程序可以訪問大型機數據,並使資料庫本地化及遠程連接透明化。 DB2以擁有一個非常完備的查詢優化器而著稱,其外部連接改善了查詢性能,並支持多任務並行查詢。 DB2具有很好的網路支持能力,每個子系統可以連接十幾萬個分布式用戶,可同時激活上千個活動線程,對大型分布式應用系統尤為適用。

2. DB2與oracle有什麼區別

1、體系結構,DB2的實例和資料庫分開的做法,我個人還是比較喜歡的,因為實例可以創建多個,資料庫的恢復直接恢復到實例下就可以了,相對ORACLE簡單多了。

2、管理工具,DB2的管理工具做得太簡陋了,控制中心只能說能用而已,而且還有好多BUG,不如ORACLE的企業管理器做得好,連WEB版都沒有。

3、備份管理,DB2的備份只能說是簡陋了,沒有備份集的管理功能,沒有恢復預覽和校驗功能,不能寫到網路驅動器上,唉太多的沒有了,ORACLE的RMAN確實強大;

4、DB2的命令執行方式,我很喜歡,可以在命令行上執行SQL,也可以在命令窗口上執行SQL,相對SQLPLUS靈活多了;

5、DB2的自動維護功能做的很好,可以定期自動整理資料庫碎片和重建索引,唯一不大理想的是自動維護的備份功能不能指定壓縮備份,相對而言ORACLE的自動維護功能就很一般了;

6、DB2的運行狀況的功能我也很喜歡,ORACLE也有類似的AHM,但是 DB2的運行狀況更為直接,可以一下就看出資料庫目前有啥問題,DB2還給出了如何處理的建議顧問程序;

7、DB2的內存狀況監控功能本來我也很喜歡,可以直接在內存狀況監控上直接改相應的參數,但是發現一個巨大BUG後,我就很不喜歡了,如果你一直點刷新,發現內存佔用量會不斷上升,我有次為了監控一個內存參數,讓這個工具運行了一天一夜,結果回來一看,暈倒,所有的內存參數增長到數百G,我想看的歷史變化情況居然沒有。

8、DB2的遠程網路連接採用的編目方式描述連接串的方式我感覺很不爽,為了改個客戶端的連接伺服器的IP地址,所有的客戶端都需要將編目刪除,然後重新編目連接地址,暈倒100多台PC機搞下來,盡管可以使用腳本,但是還是把人都快搞瘋了。ORACLE採用的用文件來配置遠程伺服器的方式,所有的PC機都通過更新伺服器直接更新本機的TNSNAME,1分鍾搞定。

9、DB2的資料庫創建如果要手工管理容器,居然沒有指定預設的系統表空間數據文件名,你要創建一堆相應的文件名,沒辦法,只好照抄oracle的OFA體系結構的文件名。

10、DB2的連接配置圖形工具實在是差了,在上面配置一步步配出的連接居然不能用!只好使用腳本,這點ORACLE比DB2強多了。

11、DB2在WINDOWS 平台的可靠性不怎麼樣,3個多星期無緣無故DOWN了4次機,ORACLE配好了應該沒有這么悲慘吧。

12、DB2的鎖自動管理機制,我比較喜歡,打開後,互鎖的概率大大降低,相同的程序,在DB2下鎖明顯少許多,但是不爽的是DB2的select命令也是加鎖的。

13、DB2 9.7的ORACLE兼容模式,我也很喜歡,遷移麻煩少了許多許多。

14、DEB2 的自動內存管理我看要比ORACLE 要強一些,幾乎所有的內存參數都能自動管理,ORACLE11G貌似也可以全部自動管理了。

15、DB2的導出數據的工具實在太簡陋了,連oracle的EXP/IMP 都不如,更不要說expdp/impdp

16、DB2的SQL語句運行速度明顯快於ORACLE,5-6段相同的代碼,同一台機器,參數都是預設參數,個人測試DB2執行速度大約要快10%-15%,也許和DB2預設的參數調優有關,ORACLE10g調優後,還是還有5-10%左右的差異。

3. SQL server、oracle、DB2這些在實際應用中有什麼區別

開放性
SQL Server
只能在Windows 上運行,沒有絲毫的開放性,操作系統的系統的穩定對資料庫是十分重要的。Windows9X系列產品是偏重於桌面應用,NT server只適合中小型企業。而且Windows平台的可靠性,安全性和伸縮性是非常有限的。它不象Unix那樣久經考驗,尤其是在處理大數據量的關鍵業務時。

Oracle
能在所有主流平台上運行(包括 Windows)。完全支持所有的工業標准。採用完全開放策略。可以使客戶選擇最適合的解決方案。對開發商全力支持。

DBz
能在所有主流平台上運行(包括Windows)。最適於海量數據。DB2在企業級的應用最為廣泛,在全球的500家最大的企業中,幾乎85%以上用DB2資料庫伺服器,而國內到97年約佔5%。

可伸縮性,並行性
SQL Server
並行實施和共存模型並不成熟。很難處理日益增多的用戶數和數據卷。伸縮性有限。Oracle平行伺服器通過使一組結點共享同一簇中的工作來擴展Window NT的能力,提供高可用性和高伸縮性的簇的解決方案。如果WindowsNT不能滿足需要, 用戶可以把資料庫移到UNIX中。

DB2
DB2具有很好的並行性。DB2把資料庫管理擴充到了並行的、多節點的環境。資料庫分區是資料庫的一部分,包含自己的數據、索引、配置文件、和事務日誌。資料庫分區有時被稱為節點或資料庫節點。

安全性
SQL server
沒有獲得任何安全證書。

Oracle Server
獲得最高認證級別的ISO標准認證。

DB2
獲得最高認證級別的ISO標准認證。

性能
SQL Server
多用戶時性能不佳

Oracle
性能最高, 保持WindowsNT下的TPC-D和TPC-C的世界記錄。

DB2
適用於數據倉庫和在線事物處理,性能較高。 客戶端支持及應用模式。


SQL Server
C/S結構,只支持Windows客戶,可以用ADO,DAO,OLEDB,ODBC連接。

Oracle
多層次網路計算,支持多種工業標准,可以用ODBC,JDBC,OCI等網路客戶連接。

DB2
跨平台,多層結構,支持ODBC,JDBC等客戶。

操作簡便
SQL Server
操作簡單,但只有圖形界面。

Oracle
較復雜, 同時提供GUI和命令行,在Windows NT和Unix下操作相同。

DB2
操作簡單,同時提供GUI和命令行,在Windows NT和Unix下操作相同。

使用風險
SQL Server
完全重寫的代碼,經歷了長期的測試,不斷延遲,許多功能需要時間來證明。並不十分兼容早期產品。使用需要冒一定風險。

Oracle
長時間的開發經驗,完全向下兼容。得到廣泛的應用。完全沒有風險。

DB2
在巨型企業得到廣泛的應用,向下兼容性好。風險小

4. oracle和SQL SERVER以及DB2之間的區別

開放性:
SQL Server
只能在windows 上運行,沒有絲毫的開放性,操作系統的系統的穩定對資料庫是十分重要的。Windows9X系列產品是偏重於桌面應用,NT server只適合中小型企業。而且windows平台的可靠性,安全性和伸縮性是非常有限的。它不象unix那樣久經考驗,尤其是在處理大數據量的關鍵業務時.

Oracle
能在所有主流平台上運行(包括 windows)。完全支持所有的工業標准。採用完全開放策略。可以使客戶選擇最適合的解決方案。對開發商全力支持。

DB2
能在所有主流平台上運行(包括windows)。最適於海量數據。DB2在企業級的應用最為廣泛,在全球的500家最大的企業中,幾乎85%以上用DB2資料庫伺服器,而國內到97年約佔5%.

可伸縮性,並行性
SQL server
並行實施和共存模型並不成熟。很難處理日益增多的用戶數和數據卷。伸縮性有限。

Oracle
平行伺服器通過使一組結點共享同一簇中的工作來擴展windownt的能力,提供高可用性和高伸縮性的簇的解決方案。
如果windowsNT不能滿足需要, 用戶可以把資料庫移到UNIX中。

DB2
DB2具有很好的並行性。DB2把資料庫管理擴充到了並行的、多節點的環境.
資料庫分區是資料庫的一部分,包含自己的數據、索引、配置文件、和事務日
志。資料庫分區有時被稱為節點或資料庫節點

安全性
SQL server
沒有獲得任何安全證書。

Oracle Server
獲得最高認證級別的ISO標准認證。

DB2
獲得最高認證級別的ISO標准認證。

性能
SQL Server
多用戶時性能不佳

Oracle
性能最高, 保持windowsNT下的TPC-D和TPC-C的世界記錄。

DB2
適用於數據倉庫和在線事物處理性能較高。

客戶端支持及應用模式
SQL Server
C/S結構,只支持windows客戶,可以用ADO,DAO,OLEDB,ODBC連接.

Oracle
多層次網路計算,支持多種工業標准,可以用ODBC,JDBC,OCI等網路客戶連接

DB2
跨平台,多層結構,支持ODBC,JDBC等客戶

操作簡便性
SQL Server
操作簡單,但只有圖形界面.

Oracle
較復雜, 同時提供GUI和命令行,在windowsNT和unix下操作相同

DB2
操作簡單,同時提供GUI和命令行,在windowsNT和unix下操作相同

使用風險性
SQL server
完全重寫的代碼,經歷了長期的測試,不斷延遲,許多功能需要時間來證明。並不十分兼容早期產品。使用需要冒一定風險。

Oracle
長時間的開發經驗,完全向下兼容。得到廣泛的應用。完全沒有風險。

DB2
在巨型企業得到廣泛的應用,向下兼容性好。風險小。

5. db2與oracle的異同點

都是大型資料庫, db2處理復雜SQL語句較強,oracle一般處理簡單sql語句強。

6. 簡述:oracle,DB2,MS SQL, Access資料庫的特點

特點不好說, 很復雜, 我就說一下我對這4個資料庫的使用感受吧:

DB2: 關系型資料庫, 適用於大型的分布式應用系統, 確實是非常非常好的資料庫, 無論穩定性, 安全性, 恢復性等等都無可挑剔, 而且從小規模到大規模的應用都非常適合, 但是使用起來覺得非常繁瑣, 首先安裝的時候要求頗多, 很多軟體都可能和DB2產生沖突, 因為一般DB2都是安裝在小型機或者伺服器上的, 所以在PC上安裝很費事兒. 新建一個庫需要設置很多東西, 分配各種各樣的存儲空間, 我們在講DB2的時候沒有將多少應用, 幾乎整節課都是在配置它.

Oracle: 關系型資料庫, 是目前市場佔有率最大的資料庫, 我在學習SSH的時候用的就是Oracle, 安裝起來很繁瑣, 而且居然程序文件有3G之多... 用起來非常方便, 對於我這樣的初學者, 有很簡單的配置, 對於要求很高的企業級應用, 也有很復雜的配置和管理方法, 有很強大的數據字典, 可以說是最實用的資料庫了, 但是查了一下, 價格不菲...

MS SQL: 不知道你想了解的是2000 還是2005, 這兩個版本差了很多, 2000的資料庫做的不錯, 程序很小, 操作簡單, 功能較全, 算是各方面都很中庸的資料庫吧, 是中型資料庫, 我的畢業設計就是用MS SQL 2000做的. 2005中加入了很多功能, 復雜多了, 有大型資料庫的風范了, 而且價格也變高了, 個人覺得除非用的是Window Server 系統或者針對Microsoft產品, 否則不如用Oracle好.

MYSQL: 不知道你為什麼沒有問MYSQL, 這是一個很好的關系型資料庫, 免費, 而且功能很全, 程序又小, 安裝簡單, 現在很多網站都用MYSQL, 在欄位約束上做的差了點兒, 其他的都不錯, 和MS SQL 用著差不多.

Access: 典型的桌面資料庫, 覺得做個單機系統, 比如記賬, 記事兒什麼的還成, 在區域網里跑個小系統都夠嗆, 數據源連接很簡單, 因為是Office的資料庫, 所以Windows自帶數據源.

7. 請教,oracle丶db2丶sql server選擇那一款學習較好

必須oracle啊。下面給你分析分析:

  • 總體來講:

Oracle資料庫領域老大。
SQL Server只適合個人使用或小型企業,成本低,但為了學習我也不會選擇它,缺點多多。
DB2 功能上緊次Oracle,擔接觸的人不多,應用面不如Oracle。

看了下面的你們就都會明白了,不懂的就應該知道以後如何選擇使用的資料庫了。

1.選擇一個好的資料庫是非常重要的。
2.如何選擇一個好的資料庫

  • 開放性:
    SQL Server ,只能在windows 上運行,沒有絲毫的開放性,操作系統的系統的穩定對資料庫是十分重要的。Windows9X系列產品是偏重於桌面應用,NT server只適合中小型企業。而且windows平台的可靠性,安全性和伸縮性是非常有限的。它不象unix那樣久經考驗,尤其是在處理大數據量的關鍵業務時.

    Oracle ,能在所有主流平台上運行(包括 windows)。完全支持所有的工業標准。採用完全開放策略。可以使客戶選擇最適合的解決方案。對開發商全力支持。

    DB2 ,能在所有主流平台上運行(包括windows)。最適於海量數據。DB2在企業級的應用最為廣泛,在全球的500家最大的企業中,幾乎85%以上用DB2資料庫伺服器,而國內到97年約佔5%.

  • 可伸縮性,並行性
    SQL server ,並行實施和共存模型並不成熟。很難處理日益增多的用戶數和數據卷。伸縮性有限。

    Oracle ,平行伺服器通過使一組結點共享同一簇中的工作來擴展windownt的能力,提供高可用性和高伸縮性的簇的解決方案。如果windowsNT不能滿足需要, 用戶可以把資料庫移到UNIX中。

    DB2 ,DB2具有很好的並行性。DB2把資料庫管理擴充到了並行的、多節點的環境.
    資料庫分區是資料庫的一部分,包含自己的數據、索引、配置文件、和事務日
    志。資料庫分區有時被稱為節點或資料庫節點

  • 安全性
    SQL server ,沒有獲得任何安全證書。

    Oracle Server獲得最高認證級別的ISO標准認證。

    DB2 ,獲得最高認證級別的ISO標准認證。

  • 性能
    SQL Server ,多用戶時性能不佳

    Oracle ,性能最高,保持windowsNT下的TPC-D和TPC-C的世界記錄。

    DB2 ,適用於數據倉庫和在線事物處理性能較高。

8. Oracle 和 DB2有哪些區別

Oracle 和 DB2的區別如下:
1、取前N條記錄
Oracle:Select * from TableName where rownum <= N;
DB2:Select * from TableName fetch first N rows only;
2、取得系統日期
Oracle:Select sysdate from al;
DB2:Select current timestamp from sysibm.sysmmy1;
3、空值轉換
Oracle:Select proctid,loginname,nvl(cur_rate,'0') from TableName ;
DB2:Select proctid,loginname,value(cur_rate,'0') from TableName;
Coalesce(cur_rate,'0')
4、類型轉換(8版有了to_char,to_date,9版新增了to_number)
Oracle:select to_char(sysdate,'YYYY-MM-DD HH24:MI:SS') from al;
DB2:select varchar(current timestamp) from sysibm.sysmmy1;
## Oracle數據類型改變函數:to_char()、to_date()、to_number()等;
如果僅僅取年,月,日等,可以用to_char(sysdate, 'YYYY'),to_char('MM') ,to_char('DD')取得。
只取年月日TRUNC(SYSDATE),
取時分秒TO_CHAR(SYSDATE,'HH24:MI:SS')。
## DB2數據類型改變函數:char()、varchar()、int()、date()、time()等;
取得年,月,日等的寫法:YEAR(current timestamp),MONTH(current timestamp),DAY(current timestamp),HOUR(current timestamp),MINUTE(current timestamp),SECOND(current timestamp),MICROSECOND(current timestamp),
只取年月日可以用DATE(current timestamp),取時分秒TIME(current timestamp)。
Char()是定長字元串(1-255),varchar()為非定長字元串(1-32672)
日期,時間形態變為字元形態: char(current date),char(current time)
將字元串轉換成日期或時間形態:TIMESTAMP('2002-10-2012:00:00'),DATE('2002-10-20'),
DATE('10/20/2002'),TIME('12:00:00')
## 目前DB2 V8也支持to_char和to_date
5、快速清空大表
Oracle:truncate table TableName ;
DB2:alter table TableName active not logged initially with empty table;
6、關於ROWID
Oracle它是由資料庫唯一產生的,在程序里可以獲得
DB2 v8也有此功能。
7、To_Number
Oracle:select to_number('123') from al;
DB2:select cast('123' as integer) from sysibm.sysmmy1;
SELECT CAST ( current time as char(8)) FROMsysibm.sysmmy1
8、創建類似表
Oracle:create table a as select * from b ;
DB2:create table a like b ;
CREATE TABLE tab_newAS select col1,col2…FROMtab_old DEFINITION ONLY (8版有效,9版無效)
9、decode方法
Oracle:decode方法(DECODE(條件,值1,翻譯值1,值2,翻譯值2,...值n,翻譯值n,預設值))或者case語句
DB2中只有CASE表達式
SELECT id ,name ,
CASE
WHEN integer(flag)=0 THEN 『假』
WHEN integer(flag)=1 THEN 『真』
ELSE 『異常』
END
FROM TEST
或者
SELECT id ,name ,
CASE integer(flag)
WHEN 0 THEN 『假』
WHEN 1 THEN 『真』
ELSE 『異常』
END
FROM TEST
10、子查詢(8版,9版也支持子查詢)
Oracle:直接用子查詢
Db2:with語句
WITH a1 AS
(select max(id) as aa1 from test )
select id ,aa1 from test ,a1
11、數據類型
比較大的差別:
Oracle:char 2000
DB2: char 254
Oracle: date datetime
Db2: DATE:日期TIME:時間TIMESTAMP:日期時間
1、數據類型轉換函數

整型轉字元型
字元串轉整形
字元串轉浮點型
浮點型轉字元串
字元串轉日期
字元串轉時間戳
日期轉字元串

ORACLE
to_char(1)
to_number('1')
to_number('1.1')
to_char(1.1)
to_date('2007-04-26','yyyy-mm-dd')
to_date('2007-04-26 08:08:08','YYYY-MM-DD HH24:MI:SS')
to_char(to_date('2007-04-29','yyyy-mm-dd'),'yyyy-mm-dd')

DB2
char(1)
int('1')
double('1.1')
char(1.1)
date('2007-04-26')
to_date('2007-04-26 08:08:08','YYYY-MM-DD HH24:MI:SS')
char(date('2007-04-29'))

兼容寫法
cast(1 as char)
cast('1' as int)



兼容

2、Where條件弱類型判斷
oracle: where 字元型欄位 in (整形) 是允許,DB2不允許
select 'abc' from al where '1' in (1) 在oracle下可通過
select 'abc' from sysibm.sysmmy1 where '1' in (1) 在DB2下報錯
oracle:where 字元型欄位=數字型欄位 允許,DB2不允許
select 'abc' from al where '1'=1 在oracle下可通過
select 'abc' from sysibm.sysmmy1 whre '1'=1 在DB2下報錯

3、replace關鍵字
oracle支持,DB2不支持 create or replace語句在DB2下是非法的

4、子查詢別名
ORACLE 支持select * from(select 1 from al) 或者 select * from(select 1 from al) t
DB2 支持select * from(select 1 from sysibm.sysmmy1) t 或者 select * from(select 1 from sysibm.sysmmy1) as t
固兼容的寫法是select * from(子查詢) t

5、DATE數據類型的區別
ORACLE中DATE型也是帶有時分秒的,但DB2下DATE只是年月日,如'2007-04-28',且可作為字元串直接操作,DB2中要記錄時分秒必須採用TIMESTAMP型
一個採用hibernate後常見的兼容問題是:
如果在映射文件中定義了某個欄位為Date型
<property name="createTime" type="java.util.Date" >
<column name="CREATE_TIME" length="7" />
</property>
則在DB2下,此欄位必須定義為timestamp,而不能定義成DATE,不然會報出字元串右截斷的錯誤

對於DB2來說,在查詢條件中可以直接用字元串指定日期或時間戳類型欄位的值,例如 where create_date = '2007-04-26' 、where create_timestamp = '2007-04-26 08:08:08' ,無須使用字元串轉日期函數

6、分頁的處理
如果採用JDBC分頁的話,注意rownum在DB2中不受支持,比如從masa_area表中取得area_id最小的10條記錄,語句分別如下,注意這里的別名t書寫方法
ORACLE: select t.* from (select rownum as r1 ,masa_area.* from masa_area order by area_id) t where t.r1<=10
DB2: select t.* from (select rownumber() over() as r1 ,masa_area.* from masa_area order by area_id) t where t.r1<=10

7、decode函數
decode函數在DB2不被支持,兼容的寫法是採用case when

8、NVL函數
nvl寫法在DB2不被支持,兼容的寫法是採用coalesce
ORACLE: select NVL(f_areaid,'空') from masa_user 等同於 select coalesce(f_areaid,'空',f_areaid) from masa_user
DB2: select coalesce(f_areaid,'空',f_areaid) from masa_user

9、substr的不同
DB2 substr舉例如下:
masa_group表的f_groupCode欄位定義成VARCHAR(100),所以下面這個語句不會出錯,如果是substr(f_groupCode,1,101)就出錯了
select * from masa_group where substr(f_groupCode,1,50) = '001006' order by f_groupcode
在DB2下無錯,但是
select * from masa_group where substr('001006', 1, 50) = '001006' order by f_groupcode
就報錯,說第三個參數超限
這是因為'001006'已經定義為一個長度為6的charater了

9. 如何把 DB2 數據遷移到 oracle 中

數據遷移:
1、在DB2資料庫中通過以下表查詢出表的結構
SELECT
TABNAME TAB, --表英文名稱
COLNAME COL, --列名稱
CASE
WHEN TYPENAME='VARCHAR' THEN 'VARCHAR2'
WHEN TYPENAME LIKE 'SMALLINT' OR TYPENAME LIKE 'BIGINT' THEN 'INTEGER'
WHEN TYPENAME ='CHARACTER' THEN 'CHAR'
WHEN TYPENAME='DECFLOAT' OR TYPENAME ='DECIMAL' THEN 'NUMBER'
ELSE TYPENAME
END TY
, --數據類型
LENGTH LEN , --列長度
scale S, --精度
CASE
WHEN NULLS='N' THEN '否'
WHEN NULLS='Y' THEN '是'
END N --是否為空
--TY||'('||LEN||')'
FROM
SYSCAT.COLUMNS S
WHERE
LEFT( TABSCHEMA, 3 ) <> 'SYS'
/* and s.SCALE <>0*/
ORDER BY
S.TABNAME,
S.COLNO

2、根據表的結構在oracle資料庫中建表(腳本見《create_tab_onOracle.sql》)

3、通過編寫java程序把數據從DB2導入到oracle資料庫中(以下代碼思想僅供參考)
3.1、 導入db2jcc_license_cu.jar 、db2jcc.jar 、ojdbc14.jar 三個jar包即可
3.2、 編寫三個工具類

此類鏈接DB2資料庫工具類
package com.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class ConnectionDB2 {
private static final String URL="jdbc:db2://192.168.0.98:50000/sem"; //DB2資料庫url
private static final String USER="db2admin"; //DB2資料庫賬號
private static final String PASSWORD="dnhc9988"; //DB2資料庫密碼
static{
try {
Class.forName("com.ibm.db2.jcc.DB2Driver").newInstance(); //利用反射注冊驅動
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}

public Connection getConnection(){
Connection conn=null;
try {
conn=DriverManager.getConnection(URL, USER, PASSWORD);
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
}

此類鏈接oracle資料庫工具類
package com.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class ConnectionDB2 {
private static final String URL="jdbc:db2://192.168.0.98:50000/sem"; //DB2資料庫url
private static final String USER="db2admin"; //DB2資料庫賬號
private static final String PASSWORD="dnhc9988"; //DB2資料庫密碼
static{
try {
Class.forName("com.ibm.db2.jcc.DB2Driver").newInstance(); //利用反射注冊驅動
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}

public Connection getConnection(){
Connection conn=null;
try {
conn=DriverManager.getConnection(URL, USER, PASSWORD);
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
}

此類用來關閉資料庫連接工具類
package com.util;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class CloseFunction {
//關閉連接方法,釋放資源
public static void closeConnection(Connection conn){
if (conn !=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}

//關閉執行sql,釋放資源
public static void closeExecuteSQL(Statement preparedStatement){
if (preparedStatement !=null){
try {
preparedStatement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}

//關閉查詢SQL結果,釋放資源
public static void closeResultSet(ResultSet resultSet){
if(resultSet !=null){
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}

關鍵在此類:需要從DB2資料庫查詢語句放在db2SQL變數中,往oracle插入數據的語句放在oracleSQL變數中。注意,查詢和插入的語句中欄位順序要一致,在while循環里要對日期時間處理(用setDate),然後執行junit測試類就可以了。
package com.;
import java.security.interfaces.RSAKey;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import org.junit.Test;
import com.util.CloseFunction;
import com.util.ConnectionDB2;
import com.util.ConnectionOracle;

public class FromDB2ToOracle {
@Test
public void test1() throws SQLException{
long startTime=System.currentTimeMillis(); //記錄開始時間
Connection connDB2=null; //鏈接DB2資料庫
Connection connOracle=null; //鏈接oracle資料庫
Statement statement=null;
ResultSet resultSet=null;
PreparedStatement preparedStatement=null;
try {
ConnectionOracle connectionOracle=new ConnectionOracle();
// System.out.println(connectionOracle+"鏈接oracle成功!");
ConnectionDB2 connectionDB2=new ConnectionDB2();
// System.out.println(connectionDB2+"-->>>鏈接DB2資料庫成功!");
connDB2=connectionDB2.getConnection();
//執行DB2資料庫sql語句,此處並非固定代碼
String
db2SQL="SELECT ID,SENDNO,SENDTYPE,BRNUMBER
,SENDTIME,ALARMTIME,SENDCONTENT,ISSEND ,ELEALARMID from
DB2ADMIN.ET_SENDMESSAGEINFO";
//執行oracle資料庫sql語句,此處並非固定代碼
//String oracleSQL="INSERT INTO EPC.SYS_LOG(ID,REMARK) values(?,?)";
String
oracleSQL="INSERT INTO
EPC.ET_SENDMESSAGEINFO(ID,SENDNO,SENDTYPE,BRNUMBER
,SENDTIME,ALARMTIME,SENDCONTENT,ISSEND ,ELEALARMID )"
+ "VALUES(?,?,?,?,?,?,?,?,?)";
statement=connDB2.createStatement();
statement.execute(db2SQL); //執行sql語句
resultSet=statement.getResultSet(); //獲取DB2資料庫的結果集
connOracle=connectionOracle.getConnection(); //獲取oracle資料庫連接
connOracle.setAutoCommit(false); //把oracle資料庫設置為非自動提交,以免在再循環里每次都提交,減低效率
preparedStatement=connOracle.prepareStatement(oracleSQL); //執行oracle語句,預編譯
int num=0;
while (resultSet.next()) {
num ++;
preparedStatement.setString(1,resultSet.getString("ID"));
preparedStatement.setString(2, resultSet.getString("SENDNO"));
preparedStatement.setString(3, resultSet.getString("SENDTYPE"));
preparedStatement.setString(4, resultSet.getString("BRNUMBER"));
preparedStatement.setDate(5, resultSet.getDate("SENDTIME"));
preparedStatement.setDate(6, resultSet.getDate("ALARMTIME"));
preparedStatement.setString(7, resultSet.getString("SENDCONTENT"));
preparedStatement.setString(8, resultSet.getString("ISSEND"));
preparedStatement.setString(9, resultSet.getString("ELEALARMID"));/*
preparedStatement.setString(10, resultSet.getString("CONSUMETIME"));
preparedStatement.setString(11, resultSet.getString("TASKID"));
preparedStatement.setString(12, resultSet.getString("ISSYNCHRO"));
preparedStatement.setString(13,resultSet.getString("LOGTYPE"));
preparedStatement.setString(14, resultSet.getString("ISCACHE"));
preparedStatement.setString(15, resultSet.getString("LAST_RPORT_TIME"));
preparedStatement.setString(16, resultSet.getString("AUTO_REMEMBER"));
preparedStatement.setString(17, resultSet.getString("REMARK"));*/
preparedStatement.addBatch();
//每一萬次在oracle資料庫里提交事務
if(num>10000){
preparedStatement.executeBatch();
connOracle.commit();
num=0;
}
}
preparedStatement.executeBatch();
connOracle.commit();
} catch (Exception e) {
connOracle.rollback(); //oracle資料庫事務回滾
e.printStackTrace();
}finally{
new CloseFunction().closeConnection(connOracle); //關閉oracle資料庫,釋放資源
new CloseFunction().closeConnection(connDB2); //關閉DB2資料庫,釋放資源
long endTime=System.currentTimeMillis(); //記錄程序結束時間
System.out.println("總的時間:"+(endTime-startTime)/1000+"秒");
}
}
}

熱點內容
4k視頻存儲卡 發布:2025-01-23 09:22:13 瀏覽:842
怎麼看筆記本配置好壞怎麼對比 發布:2025-01-23 08:50:00 瀏覽:514
安卓q用起來怎麼樣 發布:2025-01-23 08:49:14 瀏覽:294
foreach資料庫 發布:2025-01-23 08:49:05 瀏覽:741
什麼是車棚配置 發布:2025-01-23 08:42:58 瀏覽:312
智能電視盒子無線網密碼在哪裡 發布:2025-01-23 08:42:14 瀏覽:277
代理提取源碼 發布:2025-01-23 08:41:35 瀏覽:62
nas網路伺服器為什麼貴 發布:2025-01-23 08:00:00 瀏覽:941
語音伺服器未連接如何連接視頻 發布:2025-01-23 07:59:11 瀏覽:883
日流量10萬需要什麼類型伺服器 發布:2025-01-23 07:58:27 瀏覽:501