前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點選跳轉到教程。
業務 要求批量導入不小于10W條資料到 user 表,但是user表在 insert 每條資料的同時要 insert 一條對應資料到 customer表,
并且是以 customer 表的主鍵作為 user 表的外鍵。
是以想到要一次性擷取多個 序列值,再把對應的序列給不同表,并分别作為兩個表的主鍵和外鍵的值。
方法很簡單 就一句代碼 :
String squence ="select USR_CUSTOMER_SEQ.nextval cust_id from (select 1 from all_objects where rownum <= "+usrlist.size()+")";
List<String> squenceList = BatchInsert.selectSql(squence); "select USR_CUSTOMER_SEQ.nextval cust_id from (select 1 from all_objects where rownum <= "+usrlist.size()+")";
List<String> squenceList = BatchInsert.selectSql(squence);
usrlist 是解析表格後得到的要導入的 user資料 集合,有多少條資料就取多少個序列值。
selectSql 方法 隻是JDBC連接配接資料庫 執行了這句SQL 并傳回了查到的 序列值,拿到這個序列集合就可以根據業務作後續實作了。
// 單純查詢
public static List<String> selectSql(String sql){
Connection conn = null;//定義為空值
Statement stmt = null;
ResultSet rs = null;
conn = getConnection();
List<String> list = new ArrayList<String>();
try {
stmt = conn.createStatement();//建立一個Statement語句對象
rs = stmt.executeQuery(sql);//執行sql語句
while(rs.next()){
list.add(rs.getString("cust_id"));
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
try {
conn.close();
stmt.cancel();
rs.close();
}catch (SQLException e) {
e.printStackTrace();
}
}
return list;
}
getConnection 方法是擷取資料庫連接配接:
public static Connection getConnection(){ //連接配接資料庫的方法
try {
Class.forName("oracle.jdbc.driver.OracleDriver"); //初始化驅動包
conn = DriverManager.getConnection(url, user, password);
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
另 批量導入實作見博文:關聯表多資料的批量insert (批量導入,測試10W條資料用時46秒)