JDBC批量插入txt文件中的内容到数据库

转自:https://blog.csdn.net/atggdsai/article/details/42804405

一开始尝试了单条插入,13万条记录差不多2个半钟才能完全从文件中读取到数据库中,后来用了批量插入,用时29秒!



代码如下:

[java]  view plain  copy
  1. import java.io.BufferedReader;  
  2. import java.io.File;  
  3. import java.io.FileInputStream;  
  4. import java.io.InputStreamReader;  
  5. import java.sql.Connection;  
  6. import java.sql.DriverManager;  
  7. import java.sql.PreparedStatement;  
  8.   
  9.   
  10. public class DataToMysql {  
  11.     public static void main(String[] args) {  
  12.         String url = "jdbc:mysql://localhost:3306/cityzendb";      
  13.         String username = "root";      
  14.         String password = "";      
  15.         PreparedStatement ps =null;  
  16.         Connection conn=null;  
  17.         InputStreamReader inputStreamReader = null;  
  18.         BufferedReader bufferedReader = null;  
  19.         File file=new File("E:\\data.txt");  
  20.         int currentInsert = 0;  
  21.         try {  
  22.             Class.forName("com.mysql.jdbc.Driver").newInstance();  
  23.             conn = DriverManager.getConnection(url, username, password);  
  24.             conn.setAutoCommit(false);  
  25.             String sql = "insert into data(email,password,name,identity,unknow,telephone,email2) values (?,?,?,?,?,?,?)";  
  26.             ps = conn.prepareStatement(sql);  
  27.             Long beginTime = System.currentTimeMillis();   
  28.              
  29.             if(file.isFile() && file.exists()){ //判断文件是否存在  
  30.                 inputStreamReader = new InputStreamReader(new FileInputStream(file),"gbk");//考虑到编码格式  
  31.                 bufferedReader = new BufferedReader(inputStreamReader);  
  32.                 String lineTxt = null;  
  33.                 while((lineTxt = bufferedReader.readLine()) != null){  
  34.                     //根据文件里每行的分隔符进行分隔并给ps赋值  
  35.                     String[] strarray=lineTxt.split("----");   
  36.                     ps.setString(1,strarray[0]);  
  37.                     ps.setString(2,strarray[1]);  
  38.                     ps.setString(3,strarray[2]);  
  39.                     ps.setString(4,strarray[3]);  
  40.                     ps.setString(5,strarray[4]);  
  41.                     ps.setString(6,strarray[5]);  
  42.                     ps.setString(7,strarray[6]);  
  43.                     ps.addBatch();  
  44.                     if(currentInsert%1000==0){  
  45.                         ps.executeBatch();    
  46.                         conn.commit();  
  47.                         ps.clearBatch();  
  48.                         System.out.println("已插入"+currentInsert+"条数据");  
  49.                     }    
  50.                     currentInsert++;  
  51.                 }  
  52.                 Long endTime = System.currentTimeMillis();       
  53.                 System.out.println("插入"+currentInsert+"条记录共耗时:"+(endTime-beginTime)/1000+"秒");     
  54.                 System.gc();  
  55.                 inputStreamReader.close();  
  56.                 bufferedReader.close();  
  57.             }else{  
  58.                 System.out.println("找不到指定的文件");  
  59.             }  
  60.     } catch (Exception e) {  
  61.         System.out.println("读取文件内容出错");  
  62.         e.printStackTrace();  
  63.     }  
  64.     }  
  65. }  

另外,如果数据库的id字段加了自增长,假如已经增加了100条记录,用delete from table;把全部记录删除,再加记录的话,id会从101开始。如果想再从0开始,就用truncate table data;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值