第一次寫部落格,希望能幫到別人,同時願意相互進行一些討論,互相進步。
最近在做有關專案的時候,由於伺服器資料庫被其他人演算法讀取,導致我讀取的時候很慢,於是乎打算將自己需要的表匯入到本地的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...