Java實現Oracle到MySQL的表遷移

2021-08-05 22:20:44 字數 1956 閱讀 4528

第一次寫部落格, 希望能幫到別人, 同時願意相互進行一些討論, 互相進步。

最近在做有關專案的時候, 由於伺服器資料庫被其他人演算法讀取, 導致我讀取的時候很慢, 於是乎打算將自己需要的表匯入到本地的mysql資料庫進行處理, 剛開始當然是不想寫**, 嘗試用kettle實現表遷移, 但是無奈資料量較大, 可kettle記憶體溢位。 痛下決心自己實現。

基本思路就是先從資料庫中抽取出資料儲存到resultset的乙個集合中, 乙個next, 存到乙個list < list < string >> ,為避免記憶體溢位, 設定陣列大小超過乙個閾值就寫入資料庫, 然後清空又重新讀取, 在寫入。 其實這個也是借鑑於kettle的提交size;

首先是分別建立mysql和oracle的鏈結方法。

oracle資料連線

public static connection getconnection()  catch (classnotfoundexception e) 

try catch (sqlexception e)

return conn;

}

其實mysql方法和oracle一樣的, 只是換成mysql的驅動和資料庫罷了:

class.forname("com.mysql.jdbc.driver");

string url = "jdbc:mysql://localhost:3306/spider";

string user = "root";

string password = "***";

然後是抽取資料了:

public static list < list < string >> tableinput() throws filenotfoundexception,

sqlexception ;

int i = 0;

while (resultset.next())

findlist.add(minlist);

i++;

if (i % 10000 == 0)

}executemanysql(findlist); //最後別忘了提交剩餘的

return findlist;

} catch (sqlexception e) finally catch (sqlexception e)

try catch (sqlexception e)

} return null;

}

executemanysql(findlist) 函式如下, 因為資料量比較大, 所以我設定的每次提交大小為10000, 這樣就不會記憶體溢位了。

public static void executemanysql(list < list < string >> findlist) throws sqlexception 

// 把乙個sql命令加入命令列表

pst.addbatch();

} // 執行批量更新

pst.executebatch();

// 語句執行完畢,提交本事務

con.commit();

pst.close();

con.close(); //一定要記住關閉連線,不然mysql回應為too many connection自我保護而斷開。

}

同時我還設定了計時的函式, 可以看到這個從資料抽取到完成資料遷移的時間。

public static void main(string args) throws filenotfoundexception,

sqlexception

其實用時真不好說, 這個和程式本身、 抽取資料的主機以及本機的硬碟讀取速度有比較大的關係。

最終我抽取的資料是84800000, 將近2g的資料, 用時: 00: 57: 13: 313, 五十七分鐘還是可以了。

Java實現Oracle到MySQL的表遷移

第一次寫部落格,希望能幫到別人,同時願意相互進行一些討論,互相進步。最近在做有關專案的時候,由於伺服器資料庫被其他人演算法讀取,導致我讀取的時候很慢,於是乎打算將自己需要的表匯入到本地的mysql資料庫進行處理,剛開始當然是不想寫 嘗試用kettle實現表遷移,但是無奈資料量較大,可kettle記憶...

python實現通用excel匯入到mysql

file 要處理的 檔案 startrow 從第幾行開始匯入 table 匯入到哪個表 comitcount 多少筆一提交 由於資料庫對sql長度是有限制的,不建議設定太大 map 表字段與excel列的對映關係 import math import xlrd import json from db...

使用kettle匯入excel資料到mysql

kettle跑起來,要求有jre環境。另外,如果連線mysql資料庫的話,kettle本身是不包含mysql連線的jar,需要你手動放到安裝目錄的lib目錄下。如果是kettle啟動後放入的,需要重啟一下kettle。資料庫表設計圖 其中 id是主鍵 role code是角色 匯入時,根據excel...