zoukankan      html  css  js  c++  java
  • Hibernate+jxl+excel导入数据库

    在将excel中的10w行数据导入数据库中时,总发生内存溢出,一开始使用的Spring+Hibernate;不知如何使用批处理,后来只是用Hibernate,10W行数据几分钟完成,

    代码如下:

    public static void main(String[] args) {
      // TODO Auto-generated method stub

      String filePath = "F:/研究生-数据挖掘/中文词库";

      try {
       Session session = HibernateSessionFactory.getSession();
       Transaction ts = session.beginTransaction();
       // 加载excel文件
       File file=new File(filePath);
       String[] list=file.list();
       for (int i=0;i<list.length;i++){
        String filePath1=filePath+"/"+list[i];
       InputStream fs = new FileInputStream(filePath1);
       // 得到 workbook
       Workbook workBook = Workbook.getWorkbook(fs);
       // 取得sheet,如果你的workbook里有多个sheet 可以利用 wb.getSheets()方法来得到所有的。
       // getSheets() 方法返回 Sheet[] 数组 然后利用数组来操作。就是多次循环的事。
       Sheet sheet = workBook.getSheet(0);// 这里只取得第一个sheet的值,默认从0开始
       System.out.println(sheet.getColumns());// 查看sheet的列
       System.out.println(sheet.getRows());// 查看sheet的行
       Cell cell = null;// 就是单个单元格
       // 开始循环,取得 cell 里的内容
       for (int j = 1; j < sheet.getRows(); j++) {

        中文词库 s = new 中文词库();
        String string = sheet.getCell(0, j).getContents();// 第几列第几行的数据
        //System.out.print(string);

        double xmlid = Double.parseDouble(string);

        s.setXmlid(xmlid);
        s.setWord(sheet.getCell(1, j).getContents());
        s.set名词(sheet.getCell(2, j).getContents());
        s.set动词(sheet.getCell(3, j).getContents());
        s.set形容词(sheet.getCell(4, j).getContents());
        s.set副词(sheet.getCell(5, j).getContents());
        s.set量词(sheet.getCell(6, j).getContents());
        s.set拟声词(sheet.getCell(7, j).getContents());
        s.set结构助词(sheet.getCell(8, j).getContents());
        s.set助词(sheet.getCell(9, j).getContents());
        s.set并列连词(sheet.getCell(10, j).getContents());
        s.set连词(sheet.getCell(11, j).getContents());
        s.set介词(sheet.getCell(12, j).getContents());
        s.set代词(sheet.getCell(13, j).getContents());
        s.set疑问词(sheet.getCell(14, j).getContents());
        s.set数词(sheet.getCell(14, j).getContents());
        s.set成语(sheet.getCell(16, j).getContents());
        session.save(s);
        if (j % 50 == 0) {
         session.flush();
         session.clear();
        }

       }
       ts.commit();
       HibernateSessionFactory.closeSession();
       workBook.close();// 记得关闭
       fs.close();

      }
      }catch (Exception e) {
       e.printStackTrace();
      }
      // TODO Auto-generated method stub

     }

    }

    导入的jar包 jxl.jar

  • 相关阅读:
    为什么cmd拖拽文件进去时有时候带引号,有时候不带?
    Android开发学习笔记:Spinner和AutoCompleteTextView浅析
    使用Genymotion调试出现错误INSTALL_FAILED_CPU_ABI_INCOMPATIBLE解决办法
    Android Fragment完全解析,关于碎片你所需知道的一切
    国外程序员推荐:每个程序员都应该读的非编程书
    百度地图添加覆盖物与给定两点路线规划
    Android 百度地图 SDK v3.0.0 (三) 添加覆盖物Marker与InfoWindow的使用
    Unable to execute dex: Multiple dex files define 解决方法
    Android 百度地图 SDK v3.0.0 (二) 定位与结合方向传感器
    poppupwindow android
  • 原文地址:https://www.cnblogs.com/wzyxidian/p/5533001.html
Copyright © 2011-2022 走看看