需求:有一個很大的txt文件(1,000,000條數據),從txt中讀取有用數據庫后保存到Oracle數據庫中
利用Java實現:
1、加載文件后一行一行讀取
2、數據庫連接后按行插入到數據庫
package com.test.IF.service; import java.io.File; import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; import org.apache.commons.io.FileUtils; import org.apache.commons.io.LineIterator; public class ReadCustomerFile { int idx; Connection conn = null; PreparedStatement pstmt = null; // 使用commons-io.jar包的FileUtils的類進行讀取 public void readTxtFileByFileUtils(String fileName) { File file = new File(fileName); dbConnection(); try { LineIterator lineIterator = FileUtils.lineIterator(file, "GB2312"); while (lineIterator.hasNext()) { String line = lineIterator.nextLine(); // 行數據轉換成數組 String[] custArray = line.split("\\|"); insertCustInfo(custArray); Thread.sleep(10); } } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } finally { dbDisConnection(); } } // 插入到數據庫中 public void insertCustInfo(String[] strArray) { try { StringBuffer sqlBf = new StringBuffer(); sqlBf.setLength(0); sqlBf.append("INSERT INTO TEMP_CUST_INFO(CUST_NO, CUST_NM, MOB_NO1) \n"); sqlBf.append(" VALUES(? \n"); sqlBf.append(" , ? \n"); sqlBf.append(" , ?) \n"); pstmt = conn.prepareStatement(sqlBf.toString()); idx = 1; pstmt.clearParameters(); pstmt.setInt(idx++, Integer.parseInt(strArray[0])); pstmt.setString(idx++, strArray[1]); pstmt.setString(idx++, strArray[2]); pstmt.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } finally { if (pstmt != null) { try { pstmt.close(); } catch (SQLException e) { e.printStackTrace(); } } } } // 連接數據庫 public Connection dbConnection() { try { Class.forName("oracle.jdbc.driver.OracleDriver"); String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl"; String user = "scott"; String password = "goodluck"; conn = DriverManager.getConnection(url, user, password); System.out.println("Connection 開啟!"); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } return conn; } // 關閉數據庫 public void dbDisConnection() { if (conn != null) { try { conn.close(); System.out.println("Connection 關閉!"); } catch (SQLException e) { e.printStackTrace(); } } } public static void main(String[] args) { ReadCustomerFile rcf = new ReadCustomerFile(); rcf.readTxtFileByFileUtils("D:\\test\\customer_info.txt"); } }
確認數據庫數據: