Java實現Oracle到MySQL的表遷移

2021-07-10 13:57:54 字數 1463 閱讀 2242

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

最近在做有關專案的時候,由於伺服器資料庫被其他人演算法讀取,導致我讀取的時候很慢,於是乎打算將自己需要的表匯入到本地的mysql資料庫進行處理,剛開始當然是不想寫**,嘗試用kettle實現表遷移,但是無奈資料量較大,可kettle記憶體溢位。痛下決心自己實現。基本思路就是先從資料庫中抽取出資料儲存到resultset的乙個集合中,乙個next,存到乙個list>,為避免記憶體溢位,設定陣列大小超過乙個閾值就寫入資料庫,然後清空又重新讀取,在寫入。其實這個也是借鑑於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> 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> findlist) throws 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...