欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
從Oracle 到DB2(二)

從Oracle 到DB2(二)

孫樹(shù)龍, 工程師

 

簡(jiǎn)介: 在實(shí)際的軟件項目的開(kāi)發(fā)過(guò)程中,特別是在企業(yè)的應用系統集成(EAI)項目中廣大開(kāi)發(fā)人員經(jīng)常遇到不同關(guān)系型數據庫之間的數據移植問(wèn)題。筆者根據自己在工作中的不同數據庫數據移植的經(jīng)驗經(jīng)過(guò)通用化的java應用程序,演示把數據從Oracle數據庫移植到DB2數據庫中。

介紹

首先通過(guò)下面的圖來(lái)展示一下從Oracle到DB2的流程:



從上面的圖可以看到把Oracle的數據移植到DB2數據庫中我們的Java程序起到一個(gè)轉換器的作用,把Oracle中的不同的數據類(lèi)型映射為相應的DB2數據庫中的類(lèi)型同時(shí)把從Oracle中查詢(xún)出的數據插入到DB2數據庫中從而完成整個(gè)移植過(guò)程。下面我就結合Java程序給大家是如何實(shí)現這一功能的


1.導入必需的java類(lèi)

import java.text.*;            import java.util.*;            import java.io.*;            import java.sql.*;            import java.lang.*;            


2.下面是從屬性文件中讀取在轉換器使用的配置信息

//下面的代碼是讀屬性文件的信息            Properties props=new Properties();            File f=new File("OracleToDb2.properties");            FileInputStream in=new FileInputStream(f);            props.load(in);            String db2_dbname=props.getProperty("db2_dbname");            String db2_username=props.getProperty("db2_username");            String db2_password=props.getProperty("db2_password");            String oracle_url=props.getProperty("oracle_url");            String oracle_dbname=props.getProperty("oracle_dbname");            String oracle_username=props.getProperty("oracle_username");            String oracle_password=props.getProperty("oracle_password");            String io_tables=props.getProperty("io_tables");            

通過(guò)java的輸入流來(lái)讀取文件中的內容
其中

  1. OracleToDb2.properties為屬性文件名;
  2. db2_dbname, db2_username, db2_password 分別為目標DB2數據庫的數據庫名,數據庫用戶(hù)名,口令。
  3. oracle_url ,oracle_dbname,oracle_username,oracle_password分別為oracle數據庫的地址,數據庫名,用戶(hù)名,口令。
  4. io_tables為從Oracle移植到DB2的表名
    下面是屬性文件的全部?jì)热荩?
    db2_dbname=db2DatabaseName                db2_username=db2UserName                db2_password=db2Password                db2_host=127.0.0.1                oracle_url=127.0.0.1                oracle_dbname=oracleDatabaseName                oracle_username=oracleUsername                oracle_password=oraclePassword                io_tables=io_tables                


3.接著(zhù)分別建立DB2和ORACLE數據庫的連接

其中的參數為從屬性文件中讀入的值,jdbc用的是廋客戶(hù)機的type4:

DriverManager.registerDriver(new COM.ibm.db2.jdbc.app.DB2Driver());            Class.forName ("oracle.jdbc.driver.OracleDriver").newInstance ();            Connection connOra =            DriverManager.getConnection("jdbc:db2:"+db2_dbname,  db2_username,db2_password);            //Connection connOra = DriverManager.getConnection("jdbc:db2://"+            db2_host+":"+db2_port+"/"+db2_dbname,  db2_username,db2_password);            Connection connDB2 =DriverManager.getConnection("jdbc:oracle:thin:@"+            oracle_url+":1521:"+oracle_dbname,oracle_username, oracle_password);


4.轉換器的核心java類(lèi)

轉換器的核心java類(lèi)的方法為一個(gè)靜態(tài)的java方法MigrateTable,我在代碼中給解釋具體的功能的內容和為什么:

//引入oracle和db2的連接及需要移植的表            public static void MigrateTable(Connection connOra, Connection connDB2, String strTableName)            throws Exception            {            //進(jìn)行防錯處理            if (strTableName.length() < 3)            return;            int nRows = 0;            FileWriter fw = null;            PrintWriter pw = null;            Statement stmt = null;            ResultSet rst = null;            Statement stmtDelete = null;            PreparedStatement stmtUp = null;            try            {            //記錄轉換過(guò)程中的信息            fw = new FileWriter("OracleToDb2.log", true);            pw = new PrintWriter(fw);            System.out.println("migrating table " + strTableName);            pw.println("migrating table " + strTableName);            //確定連接賦予SQL語(yǔ)句            stmt = connOra.createStatement();            //進(jìn)行表內容的查詢(xún)            rst = stmt.executeQuery("select * from " + strTableName);            //讀入表的元數據            ResultSetMetaData meta = rst.getMetaData();            String strSql = "insert into " + strTableName;            String strFields = "(";            String strValues = "  values(";            //根據讀入的表的元數據的內容進(jìn)行遞歸的讀取            Object arObjData[] = new Object[meta.getColumnCount()];            for (int i = 0; i < arObjData.length; i ++)            {            if (i > 0)            {            strValues = strValues + ", ";            strFields = strFields + ", ";            }            strValues = strValues + "?";            strFields = strFields + meta.getColumnName(i + 1);            }            strValues = strValues + ")";            strFields = strFields + ")";            strSql = strSql + strFields + strValues;            //建立DB2數據庫的連接            stmtDelete = connDB2.createStatement();            //刪除原DB2數據庫表中的數據            stmtDelete.executeUpdate("delete from " +  strTableName);            stmtDelete.close();            stmtUp = connDB2.prepareStatement(strSql);            while (rst.next())            {            for (int i = 0; i < arObjData.length; i ++)            {            arObjData[i] = rst.getObject(i + 1);            //進(jìn)行二進(jìn)制、字符類(lèi)型的轉換            if (arObjData[i] != null && arObjData[i] instanceof String)            arObjData[i] = (Object)ISO2GB((String)arObjData[i]);            }            for (int i = 0; i < arObjData.length; i ++)            {            if (meta.getColumnType(i + 1) == java.sql.Types.BLOB)            {            byte arData[] = null;            if (arObjData[i] != null)            arData = ((Blob)arObjData[i]).getBytes(1L, (int)((Blob)arObjData[i]).length());            //讀取二進(jìn)制的數據            stmtUp.setBytes(i + 1, arData);            }            else if (meta.getColumnType(i + 1) == java.sql.Types.CLOB)            {            String strData = null;            if (arObjData[i] != null)            strData = ((Clob)arObjData[i]).getSubString(1L,            (int)((Clob)arObjData[i]).length());            stmtUp.setString(i + 1, ISO2GB(strData));            }            else            {            if (arObjData[i] != null)            stmtUp.setObject(i + 1, arObjData[i]);            else            stmtUp.setString(i + 1, null);            }            }            stmtUp.executeUpdate();            //計數器表示一個(gè)表中移植了多少行            nRows ++;            }            

上面的代碼示整個(gè)轉換器的關(guān)鍵部分,它實(shí)現了整個(gè)移植過(guò)程的大部分功能而且可以實(shí)現代碼頁(yè),二進(jìn)制的數據的移植是一個(gè)功能強大的移植工具。下面我就運行的步驟作詳細的演示:

  1. 在操作系統上的類(lèi)路徑中加入jdk的路徑。
  2. 配置屬性文件。
  3. 把oracle數據庫中的表結構倒成.ddl文件,并調整其中的數據類(lèi)型映射為DB2中的類(lèi)型建立表。
  4. 編譯整個(gè)Java文件
  5. 執行
  6. 查看日志信息

下面是整個(gè)程序的完整代碼:

import java.text.*;            import java.util.*;            import java.io.*;            import java.sql.*;            import java.lang.*;            public class OracleToDb2            {            public static void main(String[] args)            throws Exception            {            //下面的代碼是讀屬性文件的信息            Properties props=new Properties();            File f=new File("OracleToDb2.properties");            FileInputStream in=new FileInputStream(f);            props.load(in);            String db2_dbname=props.getProperty("db2_dbname");            String db2_username=props.getProperty("db2_username");            String db2_password=props.getProperty("db2_password");            String oracle_url=props.getProperty("oracle_url");            String oracle_dbname=props.getProperty("oracle_dbname");            String oracle_username=props.getProperty("oracle_username");            String oracle_password=props.getProperty("oracle_password");            String io_tables=props.getProperty("io_tables");            //建立DB2和ORACLE數據庫的分別連接            // String db2_url = "jdbc:db2://"+db2_host+":"+db2_port+"/"+db2_dbname;            DriverManager.registerDriver(new COM.ibm.db2.jdbc.app.DB2Driver());            //DriverManager.registerDriver(new COM.ibm.db2.jdbc.net.DB2Driver());            Class.forName ("oracle.jdbc.driver.OracleDriver").newInstance ();            Connection connOra = DriverManager.getConnection("jdbc:db2:"+db2_dbname,            db2_username,db2_password);            //Connection connOra = DriverManager.getConnection("            jdbc:db2://"+db2_host+":"+db2_port+"/"+db2_dbname,  db2_username,db2_password);            Connection connDB2 = DriverManager.getConnection("            jdbc:oracle:thin:@"+oracle_url+":1521:"+oracle_dbname,            oracle_username, oracle_password);            FileReader reader = new FileReader(io_tables);            LineNumberReader lreader = new LineNumberReader(reader);            String strTable = null;            while ((strTable = lreader.readLine()) != null)            {            try            {            MigrateTable(connOra, connDB2, strTable);            }            catch (Exception e)            {            e.printStackTrace();            }            }            reader.close();            connOra.close();            connDB2.close();            System.out.println("ok");            }            public static void MigrateTable(Connection connOra, Connection connDB2,            String strTableName)            throws Exception            {            if (strTableName.length() < 3)            return;            int nRows = 0;            FileWriter fw = null;            PrintWriter pw = null;            Statement stmt = null;            ResultSet rst = null;            Statement stmtDelete = null;            PreparedStatement stmtUp = null;            try            {            fw = new FileWriter("OracleToDb2.log", true);            pw = new PrintWriter(fw);            System.out.println("migrating table " + strTableName);            pw.println("migrating table " + strTableName);            stmt = connOra.createStatement();            rst = stmt.executeQuery("select * from " + strTableName);            ResultSetMetaData meta = rst.getMetaData();            String strSql = "insert into " + strTableName;            String strFields = "(";            String strValues = "  values(";            Object arObjData[] = new Object[meta.getColumnCount()];            for (int i = 0; i < arObjData.length; i ++)            {            if (i > 0)            {            strValues = strValues + ", ";            strFields = strFields + ", ";            }            strValues = strValues + "?";            strFields = strFields + meta.getColumnName(i + 1);            }            strValues = strValues + ")";            strFields = strFields + ")";            strSql = strSql + strFields + strValues;            stmtDelete = connDB2.createStatement();            stmtDelete.executeUpdate("delete from " +  strTableName);            stmtDelete.close();            stmtUp = connDB2.prepareStatement(strSql);            while (rst.next())            {            for (int i = 0; i < arObjData.length; i ++)            {            arObjData[i] = rst.getObject(i + 1);            if (arObjData[i] != null && arObjData[i] instanceof String)            arObjData[i] = (Object)ISO2GB((String)arObjData[i]);            }            for (int i = 0; i < arObjData.length; i ++)            {            if (meta.getColumnType(i + 1) == java.sql.Types.BLOB)            {            byte arData[] = null;            if (arObjData[i] != null)            arData = ((Blob)arObjData[i]).getBytes(1L,            (int)((Blob)arObjData[i]).length());            stmtUp.setBytes(i + 1, arData);            }            else if (meta.getColumnType(i + 1) == java.sql.Types.CLOB)            {            String strData = null;            if (arObjData[i] != null)            strData = ((Clob)arObjData[i]).getSubString(1L,            (int)((Clob)arObjData[i]).length());            stmtUp.setString(i + 1, ISO2GB(strData));            }            else            {            if (arObjData[i] != null)            stmtUp.setObject(i + 1, arObjData[i]);            else            stmtUp.setString(i + 1, null);            }            }            stmtUp.executeUpdate();            nRows ++;            }            pw.println("" + nRows + " rows migrated");            System.out.println("" + nRows + " rows migrated");            }            catch(Exception e)            {            if (pw != null)            e.printStackTrace(pw);            e.printStackTrace();            }            finally            {            try            {            if (rst != null)            rst.close();            }            catch (Exception ee)            {            ee.printStackTrace(pw);            }            try            {            if (stmt != null)            stmt.close();            }            catch (Exception ee)            {            ee.printStackTrace(pw);            }            try            {            if (stmtDelete != null)            stmtDelete.close();            }            catch (Exception ee)            {            ee.printStackTrace(pw);            }            try            {            if (stmtUp != null)            stmtUp.close();            }            catch (Exception ee)            {            ee.printStackTrace(pw);            }            if (fw != null)            {            fw.flush();            fw.close();            }            }            }            

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Hibernate 不同數據庫的連接及SQL方言
數據源--.dbcp.BasicDataSource 使用
數據庫連接池的應用與研究
屬性文件操作之Properties與ResourceBundle
DBUtils
Python訪(fǎng)問(wèn)數據庫
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久