需求:有一个很大的txt文件(1,000,000条数据),从txt中读取有用数据库后保存到Oracle数据库中
利用java实现:
1、加载文件后一行一行读取
2、数据库连接后按行插入到数据库
packagecom.test.IF.service;importjava.io.File;importjava.io.IOException;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.PReparedStatement;importjava.sql.SQLException;importorg.apache.commons.io.FileUtils;importorg.apache.commons.io.LineIterator;publicclassReadCustomerFile {intidx;
Connection conn=null;
PreparedStatement pstmt=null;//使用commons-io.jar包的FileUtils的类进行读取publicvoidreadTxtFileByFileUtils(String fileName) {
File file=newFile(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();
}
}//插入到数据库中publicvoidinsertCustInfo(String[] strArray) {try{
StringBuffer sqlBf=newStringBuffer();
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();
}
}
}
}//连接数据库publicConnection 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();
}returnconn;
}//关闭数据库publicvoiddbDisConnection() {if(conn !=null) {try{
conn.close();
System.out.println("Connection 关闭!");
}catch(SQLException e) {
e.printStackTrace();
}
}
}publicstaticvoidmain(String[] args) {
ReadCustomerFile rcf=newReadCustomerFile();
rcf.readTxtFileByFileUtils("D:\\test\\customer_info.txt");
}
}
确认数据库数据: