用Java实现SQL Server到Oracle数据迁移
sqlserver到oracle数据无损迁移

sqlserver到oracle数据无损迁移编者:liuli10@版本:V1.7最后修订日期:2015-11-21第一章简介1.1数据迁移随着时代发展数据越来越被重视,而很多时候,当系统需要更新换代的时候,升级后系统所是有的数据库与当前系统的数据库并不一致,此时不仅需要数据割接,最重要的是:如何能将老系统中的数据无损的割接到新系统、新数据库中。
因此,结合项目实战经验,针对从windows平台下数据库sqlserver到linux平台下oracle数据库的数据无损迁移进行总结。
1.2数据库简介一般此处会有很多数据库以及出品公司的历史以及发展历程,在编者看来然而并没有什么大用途,百度百科都可以搜索的到,因此本章结束,直接进入实战总结环节。
第二章sqlserver数据导出2.1sqlserver数据导出命令当然不可否认windows为sqlserver提供了强大的图形化平台,导出数据变得只需要点一点就能完成,然而这样的数据导出对于大批量有要求的操作,是极其劳神伤财的,因此,必须要通过命令行进行格式化导出,因此,这里介绍sqlserver 本机数据库导出命令。
2.1.1bcp命令以及参数介绍/liyanmingkong/article/details/6087674/uid-25472509-id-4304562.html/link?url=WV2JJM4JHxR7Qct8rr_-499zPc3aP_7E5rOt5l yEnG_Mj_tE9_-ZN1JPE2Vc2wRpkO8QkNGNLVznDfMgniCOnxXhK5jQppNpZk8 Jo1x8o23为了将文档尽可能精简,bcp命令的参数以及介绍请自行去以上任意网址查询。
或者自行baidu或者google搜索。
2.2实战语句解析实战语句为:bcp"select*from gwbnboss.dbo.ACCOUNT_BUSINESS"queryout "C:\Users\liuli9\Desktop\sqlserverdata_mov\textfile\ACCOUNT_BUSINESS.txt"-c -r"{#$&}"-t"{@#$}"-S"127.0.0.1"-U"数据库用户名"-P"密码"最终导出的结果存在于C:\Users\liuli9\Desktop\sqlserverdata_mov\textfile\ACCOUNT_BUSINESS.txt 文件中,当出现“{#$&}”时表示接下来是下一行数据,出现“{@#$}”时表示接下来是下一列数据。
将SQLSERVER中的数据同步到ORACLE中

如何将SQLServer2005中的数据同步到Oracle中有时由于项目开发的需要,必须将SQLServer2005中的某些表同步到Oracle数据库中,由其他其他系统来读取这些数据。
不同数据库类型之间的数据同步我们可以使用链接服务器和SQLAgent来实现。
假设我们这边(SQLServer2005)有一个合同管理系统,其中有表contract 和contract_project是需要同步到一个MIS系统中的(Oracle9i)那么,我们可以按照以下几步实现数据库的同步。
1.在Oracle中建立对应的contract 和contract_project表,需要同步哪些字段我们就建那些字段到O racle表中。
这里需要注意的是Oracle的数据类型和SQLServer的数据类型是不一样的,那么他们之间是什么样的关系拉?我们可以在SQLServer下运行:SELECT*FROM msdb.dbo.MSdatatype_mappingsSELECT*FROM msdb.dbo.sysdatatypemappings来查看SQLServer和其他数据库系统的数据类型对应关系。
第一个SQL语句是看SQL转Oracle的类型对应,而第二个表则更详细得显示了各个数据库系统的类型对应。
根据第一个表和我们的SQLServer中的字段类型我们就可以建立好Oracle表了。
ORACLE bigint NUMBER1931ORACLE binary BLOB NULL01ORACLE binary RAW-141ORACLE bit NUMBER131ORACLE char CHAR-141ORACLE char CLOB NULL01ORACLE char VARCHAR2-141ORACLE datetime DATE NULL01ORACLE decimal NUMBER-131ORACLE double precision FLOAT NULL01ORACLE float FLOAT NULL01ORACLE image BLOB NULL01ORACLE int NUMBER1031ORACLE money NUMBER1931ORACLE nchar NCHAR-141ORACLE nchar NCLOB NULL01ORACLE ntext NCLOB NULL01ORACLE numeric NUMBER-131ORACLE nvarchar NCLOB NULL01ORACLE nvarchar NVARCHAR2 -141ORACLE nvarchar(max) NCLOB NULL01ORACLE real REAL NULL01ORACLE smalldatetime DATE NULL01ORACLE smallint NUMBER531ORACLE smallmoney NUMBER1031ORACLE sysname NVARCHAR2 12841ORACLE text CLOB NULL01ORACLE timestamp RAW841ORACLE tinyint NUMBER331ORACLE uniqueidentifier CHAR3841ORACLE varbinary BLOB NULL01ORACLE varbinary RAW-141ORACLE varbinary(max) BLOB NULL01ORACLE varchar CLOB NULL01ORACLE varchar VARCHAR2-141ORACLE varchar(max) CLOB NULL01ORACLE xml NCLOB NULL01ORACLE bigint NUMBER1931ORACLE binary BLOB NULL01ORACLE binary RAW-141ORACLE bit NUMBER131ORACLE char CHAR-141ORACLE char CLOB NULL01ORACLE char VARCHAR2-141ORACLE datetime DATE NULL01ORACLE decimal NUMBER-131ORACLE double precision FLOAT NULL01ORACLE float FLOAT NULL01ORACLE image BLOB NULL01ORACLE int NUMBER1031ORACLE money NUMBER1931ORACLE nchar CHAR-141ORACLE nchar CLOB NULL01ORACLE ntext CLOB NULL01ORACLE numeric NUMBER-131ORACLE nvarchar CLOB NULL01ORACLE nvarchar VARCHAR2-141ORACLE nvarchar(max) CLOB NULL01ORACLE real REAL NULL01ORACLE smalldatetime DATE NULL01ORACLE smallint NUMBER531ORACLE smallmoney NUMBER1031ORACLE sysname VARCHAR212841ORACLE text CLOB NULL01ORACLE timestamp RAW841ORACLE tinyint NUMBER331ORACLE uniqueidentifier CHAR3841ORACLE varbinary BLOB NULL01ORACLE varbinary RAW-141ORACLE varbinary(max) BLOB NULL01ORACLE varchar CLOB NULL01ORACLE varchar VARCHAR2-141ORACLE varchar(max) CLOB NULL01ORACLE xml CLOB NULL01ORACLE bigint NUMBER1931ORACLE binary BLOB NULL01ORACLE binary RAW-141ORACLE bit NUMBER131ORACLE char CHAR-141ORACLE char CLOB NULL01ORACLE char VARCHAR2-141ORACLE datetime DATE NULL01ORACLE decimal NUMBER-131ORACLE double precision FLOAT NULL01ORACLE float FLOAT NULL01ORACLE image BLOB NULL01ORACLE int NUMBER1031ORACLE money NUMBER1931ORACLE nchar NCHAR-141ORACLE nchar NCLOB NULL01ORACLE ntext NCLOB NULL01ORACLE numeric NUMBER-131ORACLE nvarchar NCLOB NULL01ORACLE nvarchar NVARCHAR2 -141ORACLE nvarchar(max) NCLOB NULL01ORACLE real REAL NULL01ORACLE smalldatetime DATE NULL01ORACLE smallint NUMBER531ORACLE smallmoney NUMBER1031ORACLE sysname NVARCHAR2 12841ORACLE text CLOB NULL01ORACLE timestamp RAW841ORACLE tinyint NUMBER331ORACLE uniqueidentifier CHAR3841ORACLE varbinary BLOB NULL01ORACLE varbinary RAW-141ORACLE varbinary(max) BLOB NULL01ORACLE varchar CLOB NULL01ORACLE varchar VARCHAR2-141ORACLE varchar(max) CLOB NULL01ORACLE xml NCLOB NULL012.建立链接服务器。
利用SQLServer2005复制功能实现与Oracle数据库同步方法

利用SQLServer2005复制功能实现与Oracle数据库同步在项目中经常会遇到一个项目操作几个数据库的情况,若是同种类型的数据库也还好说,可以直接链接两个数据库,也可以用数据库的同步功能。
若我们的项目使用SQLServer2005进行开发,而且项目中要用到Oracle数据库中的数据,那么又该怎么实现拉?一般来说方案有以下几种。
1.分别建立链接对数据库进行操作,SQLServer可以用,操作Oracle可以用OLEDB或者用System.Data.OracleClient(需要添加引用才能用)这种方案的优点就是简单,各自写各自的数据库操作代码,缺点就是不能将两个数据库中的表直接进行联合查询,链接Oracle的每台机器必须安装OracleClient 才可以使用。
2.使用同义词操作Oracle数据库。
这种方法的具体操作我在以前的文章中已经写清楚了,这样做一来可以进行表的联合查询,二来不需要每台机器都安装OracleClient,但是还是有一个缺点:效率低,比如对同义词使用like去查找需要的数据,如果是直接连Oracle数据库也许只要0.1秒就可以找到答案,但是用同义词可能就要等10秒20秒或更久。
原来SQLServer并不是直接把查询语句传递给Oracle,让Oracle执行操作,而是将所有数据都取到SQLServer服务器上,边取数据边分析,直到满足查询条件为止。
其实这种数据放在两个服务器上还有一个缺点就是一旦Oracle服务器宕机,即使我们这边的所有服务器都是好的,那么我们的程序中用到Oracle数据的地方就无法使用。
3.直接链接Oracle数据库+同义词+作业+异常跳转方式。
这种方法具体讲就是我们的程序直接用OLEDB(OracleClient)链接Oracle数据库,同时SQLServer服务器也建立了同义词指向Oracle,在SQLServer上建立作业,将同义词中的数据拷贝到SQLServer服务器的表中。
Sql server 导入至 Oracle 具体操作经验

Sql Server 支持向Oracle中导入数据,以下以身份证号导入到数据库为例1、先在oracle数据库中建立一个临时表包含2列,1列学工号、1列身份证号。
create table cc as select outid as bh,idcardno as sfz from base_customers/delete from cc/执行完毕后,记得要提交!2、新建EXCEL 表格,表格中有2列,如下:在该表格中,将人员信息导入至EXCEL表格中。
因为SQL2000 EXCEL导入只支持EXCEL97-2003,因此新建EXCEL表格必须是2003格式的(扩展名为xls)3、通过Sqlserver导入导出工具将EXCEL数据导入至Sqlserver中,并将导入完成的表格名称修改成与Oracle库中一样的表名称CC选择导入数据选择数据源选择导入目标一直点击下一步,直至完成后,将数据库中新导入的表格重新命名成CC4、本机必须要安装Oracle客户端,在控制面板—管理工具—数据源建立一个ODBC数据源。
打开数据源,点击添加按照下面的选项选择,点击完成按照下面的选项选择,出现下面的界面:5、将Sql server 数据导入到 Oracle 中导出数据导出数据点击下一步完成后,出现如下界面点击下一步,一直到出现以下界面:sql server 向Oracle导出时一定要下拉选择表一直点击下一步,直至完成后,完成数据导入!6、最后一步执行身份证修改语句。
执行完成记得提交!update base_customers set (idcardno)=(SELECT bh FROM cc WHERE base_customers.outid = cc.bh)。
基于NetBeans的SQL Server到Oracle的通用数据迁移JAVA程序

在这里:
editorfold
是编辑器折叠
defaultstate="collapsed" 是默认状态,collapsed 是折叠的
desc=" 构造函数 "
是说明 (describe)
点击行号 15 后面小方框中的减号可以折叠代码如下:
当光标悬停在折叠得代码上时可以不展开折叠直接查看自动显示的代码。 也可以点击行号 15 后面小方框中的加号展开折叠的代码。 ¨ 重新排列代码 代码经过添加修改会变得不整齐或不符合缩进规定,这时我们可以整理代码: 在编辑器中的任意位置 > 右击 > 重新设置代码格式。 ¨ 导入必须的包 添加了代码后可能会有一些类的包需要引入: 在编辑器中的任意位置 > 右击 > 修复导入。 ¨ 添加主类 为了程序能够独立运行,用代码为该 JPanel 添加一个主类和顶层窗体 JFrame。
· 查看和修改生成的 DataMigrating.java 代码 ¨ 类 class DataMigrating 扩展 javax.swing.JPanel
¨ 构造函数
¨ 显示编辑器中代码的行号(注意:随着开发的进行行号会不断地变化。) 视图 > 显示行号。或在行号显示区域右击 >显示行号。
¨ 代码折叠 随着开发得进行代码会越来越长,查找、浏览代码会变得越来越困难,采用代码折叠是个 好办法。下面是将构造函数折叠的例子。
触发器。 5. 操作结果显示区。显示 SQL Server 和 Oracle 表的定义信息,数据和迁移信息。 下面我们分别介绍应用程序主窗体各部分的设计。 · 创建 Java 应用程序 1. 打开 NetBeans IDE 5.0 2. 文件 > 新建项目 3. 新建项目窗口:
SqlServer2005移植到Oracle

从SQL server 2005中移植数据到Oracle 10g1.移植前准备在移植前,需要安装必需的各种软件,如下:(1).安装好SQL server 2005的补丁包和SP2。
(2).安装Oracle安装包里的oracle客户端浏览器(PL/SQL Developer)。
(可以根据需要按照汉化补丁,汉化包不安装也可)(3).硬件要求:在Oracle数据库所在的硬盘保持足够剩余空间(至少有2GB的空间剩余);建议在启用Oracle服务时机器的内存不少于2GB。
没有特别说明的情况下,本文的数据移植是针对普通的属性数据。
2.移植2.1.创建数据库打开Oracle中的Database Configuration Assistant进行数据库的创建,如图所示:图表1 打开Database Configuration Assistant进入Database Configuration Assistant后点击“下一步”,然后出现如图表2所示的界面,选择“创建数据库”后点击“下一步”:如图表3所示选择第一个“一般用途”然后点击下一步:图表3 选择模板如图标2所示在创建数据库过程中的第3步,在“全局数据库名”中输入数据库名称,SID则会自动默认为全局数据库名,然后点击“下一步”;点击如图表5所示界面中的“确定”按钮系统就开始创建数据库了。
图表5图表6 正在传教数据库最后点击如图表4所示中的“退出”按钮就创建数据库完成了。
图表7 创建数据库完成2.2.登录Oracle打开PL/SQL Developer并用system(数据库默认的用户名)用户身份登录到XQ2DSGN并选择连接为SYSDBA,如图所示:图表8 登录到PLSQL2.2.1.创建表空间创建表空间的sql语句:SQL>create tablespace xq2dsgn datafile 'G:\oracle\product\10.2.0\ oradata\xq2dsgn\xq2dsgn.dbf' size 2048m autoextend on next 10m maxsize unlimited ;(参考:通过PL/SQL Developer登录到Oracle数据库上后,打开菜单:文件/新建/命令窗口,打开一个命令窗口然后在该命令窗口中执行脚本创建和删除表空间,新建用户和授权的操作,如图所示:图表9 打开命令窗口创建表空间Sql>create tablespace xqds2gn datafile ' D:\oradata\xq2dsgn\ xq2dsgn.dbf ' size 200m autoextend on next 10m maxsize unlimited;Sql>alter database datafile ' D:\oradata\xq2dsgn\ xq2dsgn.dbf ' autoexte nd on;1 DATAFILE: 表空间数据文件存放路径2 SIZE: 起初设置为200M3 UNIFORM: 指定区尺寸为128k,如不指定,区尺寸默认为64k4 空间名称xq2dsgn 与数据文件名称xq2dsgn.dbf 不要求相同,可随意命名.5 AUTOEXTEND ON/OFF表示启动/停止自动扩展表空间6alter database datafile ' D:\oradata\xq2dsgn\ xq2dsgn.dbf ' resize 500 m;//手动修改数据文件大小为500M图表10 表空间创建完成删除表空间语句如下:DROP TABLESPACE xq2dsgn INCLUDING CONTENTS AND DATAFILES;2.2.2.创建用户1.建立用户并为用户指定缺省的永久表空间和临时表空间SQL> create user xq2dsgn identified by xq2dsgndefault tablespace xq2dsgntemporary tablespace temp;用户已创建。
SQLServer往Oracle导入数据

SQLServer往Oracle导入数据由于做的软件要求跨平台,要不数据库变成Oracle的,因此需要把SQL Server 2000的数据导入到Oracle 10g中去。
发现SQL Server自带的导入导出比较好用!恩恩,现在开始讲一讲怎么吧SQL Server的数据导入到Oracle中。
先说说目的:在PC机A中安装的Windows系统下SQL Server中有源数据库DBServer。
PC机ip地址:192.168.1.103。
主机名:LENOVO-78EB319A数据库中使用管理员sa,密码lenovo。
貌似用不上……在PC机B中安装的Solaris系统下Oracle中有目标数据库DBServer。
PC机ip地址:192.168.1.105。
主机名:vic.MINg其中DBServer是空数据库,刚刚创建的。
讲A机Windows XP系统SQL Server 2000中数据库DBServer中的表和视图导入到B机Solaris 10系统Oracle 10g中去。
在Solaris下的Oracle中创建用户Oracle下创建用户赋予权限,在终端中启动 SQL Plus。
创建用户+密码(用户:sa 密码:lenovo)SQL> create user sa identified by lenovo;单独赋予用户权限SQL> grant create session to sa;SQL> grant create table to sa;SQL> grant create sequence to sa;SQL> grant create view to sa;当然也可以给用户赋予DBA权限SQL> grant sysdba to sa;在Windows下创建一个ODBC数据源控制面板——管理工具——数据源(ODBC),"系统 DSN” 项卡中点击添加按钮,选择相关Oracle驱动配置数据源信息,如下点击"Test Connection",进行测试看看是否和Solaris联通SQL Server往Oracle导入数据启动"SQL Server 企业管理器" ,在数据库——DBServer 中 "所有任务",导出数据。
sqlserver迁移到oracle具体实现

sqlserver迁移到oracle具体实现一、需求背景因系统业务发展需要,需要对各地数据进行集中管理,其中各地系统都是sqlserver2000数据库,数据大量集中,需要使用oracle数据库,因此涉及sqlserver数据迁移至oracle数据库的问题。
二、处理步骤处理步骤分为初始导出和增量交换两个操作步骤进行。
1 、其中初始导出设定一个时间截止时间将之前的业务数据利用数据库导出功能将数据导出,数据导出后由文件交换服务器传送的方式将初始导出数据导入到oracle数据库服务器中,然后通过SQLLOAD工具将数据导入。
2、增量交换在初始导出设定一个时间截止后开始启用,增量交换就是在初始导出完成后,将有变更的数据形成文件,由文件交换服务器传送,最终同步到oracle数据库服务器中,然后通过SQLLOAD工具将数据导入,与初始导出不同的是,这里要通过程序控制导出的增量数据和导出文件名。
三、初始导出1.业务数据业务数据初始导出将利用数据库导出功能将数据以文件的方式拷贝到oracle数据库服务器进行导入。
步骤:1)业务数据导成文件2)业务数据文件拷贝到oracle数据库服务器进行导入2.实现2.1.利用导出导入工具实现异构数据迁移1)sqlserver初始数据利用bcp工具导成csv格式文件--sqlserver数据导成文件--预先创建导出表格式文件:exec master..xp_cmdshell 'bcp master.dbo.sysusers format nul -T -c -f "c:\students.fmt"'--根据格式文件导出表数据(可以导成txt或csv文件格式)修改格式文件,用逗号分隔符declare @sql varchar(8000)set @sql='bcp "SELECT * FROM master..sysusers" queryout "c:\aa.csv" /f "c:\students.fmt"' exec master..xp_cmdshell @sql2)通过sqlload工具将初始数据导入oracle数据库服务器--sqlload直接导入命令示例result.csv文件内容1,默认 Web 站点,192.168.2.254:80:,RUNNING2,other,192.168.2.254:80:,STOPPED3,third,192.168.2.254:81:,RUNNINGresult.ctl文件内容:load datainfile 'c:\result.csv'into table resultxt(resultid char terminated by ',',website char terminated by ',',ipport char terminated by ',',status char terminated by whitespace)创建表:create table resultxt(resultid varchar2(500),website varchar2(500),ipport varchar2(500),status varchar2(500))/执行文件导入命令sqlldr hr/hr@orcl c:\result.ctl log=c:\resulthis.out四、增量交换1.业务数据业务数据增量交换将利用数据库导出功能将数据以文件的方式拷贝到oracle 数据库服务器进行导入。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
图1 New Gallery窗口7)在“创建数据库用户”窗口中输入用户名和口令参数,并选择默认表空间和临时表图3Manage Libraries 窗口•在“管理库”窗口中选择Libraries 标签。
图11 项目属性窗口图12 项目属性窗口⏹在Add Libraries窗口中找到前面设置的SQLServer JSBC 驱动程序库,单击图13Add Libraries窗口图14 添加Oracle JDBC驱动程序●在JDeveloper 10.1.3中写连接SQL Server的JDBC JAVA测试程序:System.out.println("Error Trace in getConnection() : " + e.getMessage());}return con;}private String getConnectionUrl(){returnurl+serverName+":"+portNumber+";databaseName="+databaseName+";selectMethod="+ selectMethod+";";}private void closeConnection(){try{if(con!=null)con.close();con=null;}catch(Exception e){e.printStackTrace();}}public void displayDbProperties(){java.sql.DatabaseMetaData dm = null;java.sql.ResultSet rs = null;try{con= this.getConnection();if(con!=null){dm = con.getMetaData();System.out.println("驱动器信息:");System.out.println("\t驱动器名字: "+ dm.getDriverName());System.out.println("\t驱动器版本: "+ dm.getDriverVersion ());System.out.println("\n数据库信息:");System.out.println("\t数据库名字: "+ dm.getDatabaseProductName());System.out.println("\t数据库版本: "+ dm.getDatabaseProductVersion());System.out.println("显示可用的数据库目录:");rs = dm.getCatalogs();while(rs.next()){System.out.println("\tcatalog: "+ rs.getString(1));}rs.close();rs = null;closeConnection();}else System.out.println("Error: No active Connection");}catch(Exception e){e.printStackTrace();}dm=null;}public static void main(String[] args) {SQLServerT est sQLServerT est = new SQLServerT est();sQLServerT est.displayDbProperties();}}编译运行,结果如下图15SQL Server JDBC连接测试程序运行结果public SQLT oOracleIV() {}private String getConnectionUrl(){returnurl+serverName+":"+portNumber+";databaseName="+databaseName+";selectMethod="+ selectMethod+";";}private java.sql.Connection getConnection(){try{// A. 注册SQL Server JDBC 驱动程序Class.forNam e("com.microsoft.jdbc.sqlserver.SQLServerDriver");// B. 创建新数据库连接con = java.sql.DriverManager.getConnection(getConnectionUrl(),userName,password);if(con!=null) System.out.println("SQL Server Connection Successful!");}catch(Exception e){e.printStackTrace();System.out.println("Error SQL Server Trace in getConnection() : " + e.getMessage());}return con;}private java.sql.Connection getOracleConnection(){try{// A. 注册Oracle JDBC 驱动程序Class.forNam e("oracle.jdbc.driver.OracleDriver");// B. 创建新数据库连接conn = java.sql.DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:oract", "ct" ,"ct");if(conn!=null) System.out.println("Oracle Connection Successful!");}catch(Exception e){e.printStackTrace();System.out.println("Error Oracle Trace in getConnection() : " + e.getMessage());}return conn;}private void closeSQLServerConnection(){try{if(con!=null)con.close();con=null;}catch(Exception e){e.printStackTrace();}}private void closeOracleConnection(){try{if(conn!=null)conn.close();conn=null;}catch(Exception e){e.printStackTrace();}}public void displayDbProperties(){java.sql.DatabaseMetaData dm = null;String InsertStatem ent ="";try{con = this.getConnection();conn = this.getOracleConnection();if(con!=null && conn!=null){// C. 创建Statement 对象Statement stmt = con.createStatement();Statement stmtOracle = conn.createStatement();// D. 执行SELECT 命令,查询结果存放在ResultSet 对象中ResultSet rset = stmt.executeQuery("SELECT * FROM 入库单");// E. 取得ResultSet 结果集相关的信息ResultSetMetaData md = rset.getMetaData();// F. 取得ResultSet 对象中的字段数量int no_cols = md.getColumnCount();String[] col_names = new String[no_cols];// G. 取得ResultSet 对象中各字段名称for (int i = 0; i < no_cols; i++)col_names[i] = md.getColumnLabel(i+1);// H. 先打印出各字段名称for (int i = 0; i < no_cols; i++)System.out.print(col_names[i]+"\t");System.out.println("\n---------------------------------------");// I. 打印每笔数据列中各字段数据while (rset.next()) {for (int i = 1; i <= no_cols; i++)System.out.print(rset.getString(i) + "\t");System.out.println("");// J. 数据插入Oracle 中InsertStatement="INSERT INTOINPUTVOUCHER(InputVoucher_id,AccountSetCode,VoucherNumber," +"InputDate,ProviderCode,Operator,Checker,CarryForwardSign)" +" VALUES (" + rset.getString(1) + ",'" + rset.getString(2) +"','" + rset.getString(3) + "'," +"TO_DATE(SUBSTR('" + rset.getString(4) +"',1,19),'yyyy-mm-dd hh24:mi:ss'),'" + rset.getString(5) +"','" +rset.getString(6) + "','" + rset.getString(7) + "'," + rset.getString(8) + ")";System.out.print(InsertStatement+"\n");stmtOracle.executeUpdate(InsertStatement);}rset.close();rset = null;stmt.close();closeSQLServerConnection();closeOracleConnection();}else System.out.println("Error: No active Connection");}catch(Exception e){e.printStackTrace();}dm=null;// B. 创建新数据库连接conn = java.sql.DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:oract", "ct" ,"ct");if(conn!=null) System.out.println("Oracle Connection Successful!");}catch(Exception e){e.printStackTrace();System.out.println("Error Oracle Trace in getConnection() : " + e.getMessage());}return conn;}private void closeSQLServerConnection(){try{if(con!=null)con.close();con=null;}catch(Exception e){e.printStackTrace();}}private void closeOracleConnection(){try{if(conn!=null)conn.close();conn=null;}catch(Exception e){e.printStackTrace();}}public void displayDbProperties(){java.sql.DatabaseMetaData dm = null;String InsertStatem ent ="";try{con = this.getConnection();conn = this.getOracleConnection();if(con!=null && conn!=null){// C. 创建Statement 对象Statement stmt = con.createStatement();Statement stmtOracle = conn.createStatement();// D. 执行SELECT 命令,查询结果存放在ResultSet 对象中ResultSet rset = stmt.executeQuery("SELECT * FROM 入库单明细");// E. 取得ResultSet 结果集相关的信息ResultSetMetaData md = rset.getMetaData();// F. 取得ResultSet 对象中的字段数量int no_cols = md.getColumnCount();String[] col_names = new String[no_cols];// G. 取得ResultSet 对象中各字段名称for (int i = 0; i < no_cols; i++)col_names[i] = md.getColumnLabel(i+1);// H. 先打印出各字段名称for (int i = 0; i < no_cols; i++)System.out.print(col_names[i]+"\t");System.out.println("\n---------------------------------------");// I. 打印每笔数据列中各字段数据while (rset.next()) {for (int i = 1; i <= no_cols; i++)System.out.print(rset.getString(i) + "\t");System.out.println("");// J. 数据插入Oracle 中InsertStatement="INSERT INTOINPUTVOUCHERDETAIL(InputVoucherDetail_id,InputVoucher_id,AccountSetCode," +"VoucherNumber,MerchCode,MerchName,Unit,Quantity,Price,Note,KeepBoo kSign, ReturnSign,CarryFforwardSign,Storage_id)" +" VALUES (" + rset.getString(1) + "," + rset.getString(2) + ",'" + rset.getString(3) + "','" +rset.getString(4) + "','" + rset.getString(5) + "','" +rset.getString(6) + "','" + rset.getString(7) + "'," +rset.getString(8) + "," + rset.getString(9) + ",'" +rset.getString(10) + "'," + rset.getString(11) + "," +rset.getString(12) + "," + rset.getString(13) + "," +rset.getString(14) + ")";System.out.print(InsertStatement+"\n");stmtOracle.executeUpdate(InsertStatement);}rset.close();rset = null;stmt.close();closeSQLServerConnection();closeOracleConnection();}else System.out.println("Error: No active Connection");}catch(Exception e){e.printStackTrace();}dm=null;}public static void main(String[] args) {SQLToOracleIVDetail sQLT oOracleIVDetail = new SQLToOracleIVDetail();sQLToOracleIVDetail.displayDbProperties();}}编译、执行,完成SQL Server表“入库单明细”到Oracle表“INPUTVOUCHERDETAIL”的数据迁移。