黑马程序员技术交流社区

标题: java项目中批量导入数据要使用到的知识点 [打印本页]

作者: 赵喜平    时间: 2013-3-27 15:40
标题: java项目中批量导入数据要使用到的知识点
本帖最后由 1170531562 于 2013-3-30 15:25 编辑

毕业设计中的项目想可以增加一个批量导入数据的功能,将会用到哪些知识点呢
作者: lucy198921    时间: 2013-3-29 23:02
本帖最后由 lucy198921 于 2013-3-29 23:03 编辑

java相关的只是基本上多掌握是最好了,比如面向对象,多线程,IO流等等之类的......

//批量添加20000条数据用时8秒。
  1. try {
  2.    String url = "jdbc:oracle:thin:@IP:1521:orcl"; // orcl为数据库的SID
  3.    String user = "oracle";
  4.    String password = "oracle";
  5.    StringBuffer sql = new StringBuffer();
  6.    sql.append("insert into ex_log (EX_LOG_ID,EX_LOG_DATE) values (?,?)");
  7.    Class.forName("oracle.jdbc.driver.OracleDriver");
  8.    Connection con = (Connection) DriverManager.getConnection(url,user,password);
  9.    // 关闭事务自动提交
  10.    con.setAutoCommit(false);

  11.    Long startTime = System.currentTimeMillis();
  12.    PreparedStatement pst = (PreparedStatement) con.prepareStatement(sql.toString());
  13.    for (int i = 0; i < list.size(); i++) {
  14.     ExLog exLog = (ExLog)list.get(i);
  15.     pst.setString(1, exLog.getExLogId());
  16.     pst.setString(2, exLog.getExLogDate());
  17.     // 把一个SQL命令加入命令列表
  18.     pst.addBatch();
  19.    }
  20.    // 执行批量更新
  21.    pst.executeBatch();
  22.    // 语句执行完毕,提交本事务
  23.    con.commit();
  24.    Long endTime = System.currentTimeMillis();
  25.    System.out.println("用时:" + (endTime - startTime));
  26.    pst.close();
  27.    con.close();
  28.   } catch (ClassNotFoundException e) {
  29.    e.printStackTrace();
  30.   } catch (SQLException e) {
  31.    e.printStackTrace();
  32.   }
复制代码

作者: 何衍其    时间: 2013-3-30 15:02
从选择数据源到持久化,会用到如下的技术
1,解析数据源,可能是文本文件,或excel文档,会用到I/O流,或第三方jar包
2,如果需要验证导入数据的合法性,且你的界面是网页的。要用到javascript或正规表达式
3,导入的数据一般存放到数据库,会用到JDBC或其它ORM包,及SQL语言。

如果是持久化到数据库,需要考虑
1,在重复导入相同的数据时,是删除之前的数据再插入,还是更新之前的数据
2,如果需要知道批量导入的结果,成功了多少条,多少条失败。就需要保存入库的状态
3,或者其它的要求




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2