A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张绍成 黑马帝   /  2011-12-23 21:18  /  1684 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 tianshan20081 于 2011-12-25 15:32 编辑

今天找到一的200多M的txt 文件。文件格式表规范。
代码:
  1. public static void main(String[] args) throws IOException {
  2.                
  3.         BufferedReader br = new BufferedReader(new InputStreamReader(new
  4. FileInputStream("D:\\TDDownload\\XXX.sql")));
  5.         String text ;
  6.         int i = 0 ;
  7.         System.out.println(new Timestamp(System.currentTimeMillis()));
  8.         while((text = br.readLine())!= null){

  9.                   String[] ss= text.split("#");

  10.                   User u = new User();
  11.                   u.setUsername(ss[0].trim());
  12.                   u.setPassword(ss[1].trim());
  13.                   u.setEmail(ss[2].trim());
  14.                   
  15.                   UserDao ud = new UserDao();
  16.                   ud.addUser(u);
  17.                   i++ ;
  18.                   
  19.         }
  20.         System.out.println(i);
  21.         System.out.println(new Timestamp(System.currentTimeMillis()));

  22.         }
复制代码
  1. public void addUser(User u){
  2.                 Connection conn = DBUtil.getconn();
  3.                 PreparedStatement ps = null ;
  4.                 String sql = "insert into tb_csdnuser(username,password,email) values(?,?,?)";
  5.                 try {
  6. //                        System.out.println(u.getUsername()+"#"+u.getPassword()+"#"+u.getEmail());
  7.                        
  8.                         ps = conn.prepareStatement(sql);
  9.                         ps.setString(1, u.getUsername());
  10.                         ps.setString(2, u.getPassword());
  11.                         ps.setString(3, u.getEmail());
  12.                         ps.execute();
  13.                        
  14.                         DBUtil.commit(conn);
  15.                 } catch (SQLException e) {
  16.                         DBUtil.rollback(conn);
  17.                         // TODO Auto-generated catch block
  18.                         e.printStackTrace();
  19.                 }finally{
  20.                         DBUtil.closeConn(conn);
  21.                         DBUtil.closePS(ps);
  22.                 }
  23.                
  24.         }
复制代码
都写了好几个小时了 还没写完!  
我的代码有哪些地方可以提高效率!

评分

参与人数 1技术分 +1 收起 理由
吴上储 + 1

查看全部评分

2 个回复

倒序浏览
一次只执行一条语句、这对于处理大量更新命令的效率不高、JDBC 2引入的批更新方式用于处理非select的命令、将这些命令都搜集起来、一起执行。
  1. //add SQL commands to the batch
  2. statement.addBatch("insert into test values (1,'smith');
  3. statement.addBatch("insert into test values (1,'smith');
  4. //Execute the batch
  5. int count[] = statement.executeBatch();
复制代码
如果真要用批处理、还要判断你的驱动程序是否支持批更新、MySql Access Oracle JDBC驱动器都支持的。
  1. connection.getMetaData().supportsBatchUpdates()
复制代码
判断是否可以支持批更新
--------------------------------------------------------------------华丽丽的分割线---------------------------------------------------------------
那么对于这600万的数据、那么一句一句的添加将会浪费很多时间。
对于你的这段、除了需要用批更新外、还需要优化的不要都输出一遍吧、哥们、600万啊。我感觉这输出没必要了吧。还有就是你没添加一个信息就关闭了连接、然后下次就是重新连接。这样也很浪费时间的。

评分

参与人数 1技术分 +1 收起 理由
吴上储 + 1

查看全部评分

回复 使用道具 举报
写个dao类,把jdbc封装了,每次用的时候调用它,会减少很多的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马