今天碰到數據庫遷移的問題,從mysql數據庫遷移到db2數據庫,首先嚐試了 ibm 的ibm_mtk_V2_win進行數據遷移,可是狗血的出現了不少問題(這個只支持java6,版本過高記得換回來) 後來想到了寫腳本(主要是一個sql有一兩百兆的數據,複製粘貼執行不可行)java
package com.hsm.db; import java.io.*; import java.sql.*; /** * 讀取指定文件下sql腳本,執行到數據庫 * 朱行讀取分批處理批量插入數據庫 */ public class TestReadFile { public static void main(String[] args) { System.err.println("begin"); long start = System.currentTimeMillis(); String path = "C:\\Users\\huangsm@allinfinance.com\\Desktop\\tm_account.sql"; getData(path); System.err.print((System.currentTimeMillis() - start) / 1000); } private static void getData(String path) { //讀取文件 BufferedReader reader; Connection conn = null; Statement pst = null; try { Class.forName("com.ibm.db2.jcc.DB2Driver"); conn = DriverManager.getConnection( "jdbc:db2://10.250.1.211:50000/zyjr:currentSchema=C;","zyjr","zyjr"); System.out.println("數據庫鏈接成功!!!"); pst = conn.createStatement(); reader = new BufferedReader(new InputStreamReader(new FileInputStream(path), "UTF-8")); String line; int i = 0; while ((line = reader.readLine()) != null) { //主要防止空行問題,我的以爲這樣比簡單 if(line.length()<=10){ continue; } if(i==0){ //這個執行的時候發現的問題,不知道爲何,用這個測試 System.out.println(line); pst.execute(line.substring(1,line.length()-1)); }else{ System.out.println(line); pst.execute(line.substring(0,line.length()-1)); } if (i % 100 == 0) { System.out.println("執行了:" + i); } i += 1; } reader.close(); // 執行批量更新 } catch (Exception e) { e.printStackTrace(); } finally { try { if (pst != null) { pst.close(); } if (conn != null) { conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } } }
寫完以後被一個傢伙說,這樣寫數據庫插入太慢了,我就呵呵了,畢竟花了這麼長時間,最好告訴我能夠寫sh腳本,並且還提供了sh腳本案例,我就開心的換了一個方式.(工做就是好,能夠互相的交流)mysql
#!/bin/sh echo "--------------------------------- cts數據初始化 START----------------------------" db2 connect to zyjrdb user zyjrusr using zyjrusr db2 set schema=CTS #插入數據 #db2 -tvf tm_account.sql db2 -tvf tm_address.sql db2 -tvf tm_card.sql db2 -tvf tm_contact_tel.sql db2 -tvf tm_contract.sql db2 -tvf tm_customer.sql db2 -tvf tm_repayment.sql #db2 -tvf tm_period.sql db2 connect reset echo "--------------------------------- cts 數據初始化 END ----------------------------"
這個腳本很簡單,主要就是把數據執行寫在了一塊兒,還有執行腳本的時候必定要讓腳本具備可執行權限,語句爲sql
chmod +x fielname #具體細節能夠看書
這個時候想起了一句話:入了行,什麼都簡單了數據庫