首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

解决Hibernate +jxl将大批量excel导入数据库,内存储器溢出

2012-09-27 
解决Hibernate +jxl将大批量excel导入数据库,内存溢出在将excel中的10w行数据导入数据库中时,总发生内存溢

解决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 }}

?

热点排行