日期:2014-05-16 浏览次数:20632 次
在将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 } }
?