實現sql語句插入功能

今天碰到數據庫遷移的問題,從mysql數據庫遷移到db2數據庫,首先嚐試了 ibm 的ibm_mtk_V2_win進行數據遷移,可是狗血的出現了不少問題(這個只支持java6,版本過高記得換回來) 後來想到了寫腳本(主要是一個sql有一兩百兆的數據,複製粘貼執行不可行)java

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

sh 腳本實現

#!/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 #具體細節能夠看書

這個時候想起了一句話:入了行,什麼都簡單了數據庫

相關文章
相關標籤/搜索