ToB企服应用市场:ToB评测及商务社交产业平台

标题: Apache POI操作批量导入MySQL数据库 [打印本页]

作者: 惊雷无声    时间: 2022-6-25 11:53
标题: Apache POI操作批量导入MySQL数据库
Apache POI操作批量导入MySQL数据库

   poi介绍:
  Apache POI是用Java编写的免费开源的跨平台的Java API,Apache POI提供API给Java程序对Microsoft Office格式档案读和写的功能,其中使用最多的就是使用POI操作Excel文件。
  POI使用到的相关maven依赖坐标如下:
  1. <dependency>
  2.   <groupId>org.apache.poi</groupId>
  3.   <artifactId>poi</artifactId>
  4.   <version>3.14</version>
  5. </dependency>
  6. <dependency>
  7.   <groupId>org.apache.poi</groupId>
  8.   <artifactId>poi-ooxml</artifactId>
  9.   <version>3.14</version>
  10. </dependency>
复制代码
POI的相关操作结果
  1. HSSF - 提供读写Microsoft Excel XLS格式档案的功能
  2. XSSF - 提供读写Microsoft Excel OOXML XLSX格式档案的功能
  3. HWPF - 提供读写Microsoft Word DOC格式档案的功能
  4. HSLF - 提供读写Microsoft PowerPoint格式档案的功能
  5. HDGF - 提供读Microsoft Visio格式档案的功能
  6. HPBF - 提供读Microsoft Publisher格式档案的功能
  7. HSMF - 提供读Microsoft Outlook格式档案的功能
复制代码
1、POI操作入门案例

1.1、从Excel文件读取数据1

   使用POI可以从一个已经存在的Excel文件中读取数据
  前提需要建立一个需要读取的表格数据进行读取
  1. /**
  2. * 使用poi读取表格数据
  3. * @throws Exception
  4. */
  5. @Test
  6. public void test1() throws Exception {
  7.     // 1、加载指定的文件进行读取
  8.     XSSFWorkbook excel = new XSSFWorkbook(new FileInputStream("C:\\Users\\zhong\\Desktop\\poi.xlsx"));
  9.     // 2、读取表格中的Sheet页,通过索引决定
  10.     XSSFSheet sheetAt = excel.getSheetAt(0);
  11.     // 3、读取Sheet页中的行数据
  12.     for (Row row : sheetAt) {
  13.         // 4、读取每一行数据的单元格数据(如果涉及到类型装转换的可能出现报错消息,后期通过代码进行判断即可)
  14.         for (Cell cell : row) {
  15.             System.out.print(cell+"   ");
  16.         }
  17.         System.out.println();
  18.     }
  19.     // 5、关闭读取文件的流
  20.     excel.close();
  21. }
复制代码
输出结果如下:
  1. 姓名   省份   城市   
  2. 张三   广东   高州   
  3. 李四   四川   成都   
复制代码
POI操作Excel表格封装了几个核心对象:

  1. XSSFWorkbook:工作簿
  2. XSSFSheet:工作表
  3. Row:行
  4. Cell:单元格
复制代码
1.2、从Excel文件读取数据2

   还有一种方式就是获取工作表最后一个行号,从而根据行号获得行对象,通过行获取最后一个单元格索引,从而根据单元格索引获取每行的一个单元格对象,代码如下:
  1. /**
  2. * 使用poi读取文件的第二种方式
  3. * @throws Exception
  4. */
  5. @Test
  6. public void test2() throws Exception {
  7.     // 1、加载指定的文件进行读取
  8.     XSSFWorkbook excel = new XSSFWorkbook(new FileInputStream("C:\\Users\\zhong\\Desktop\\poi.xlsx"));
  9.     // 2、读取表格中的Sheet页,通过索引决定
  10.     XSSFSheet sheetAt = excel.getSheetAt(0);
  11.     // 3、获取当前工作表中最后一个行号,注意行号是从0开启的
  12.     int lastRowNum = sheetAt.getLastRowNum();
  13.     // 4、遍历获取到的行号
  14.     for (int i = 0; i <= lastRowNum; i++) {
  15.         // 5、根据行号获取到每一行的数据
  16.         XSSFRow row = sheetAt.getRow(i);
  17.         // 6、获取到当前最后一个单元格索引
  18.         short lastCellNum = row.getLastCellNum();
  19.         // 7、遍历当前的单元格获取到具体的数据
  20.         for (int j = 0; j < lastCellNum; j++) {
  21.             // 获取到单元格的对象
  22.             XSSFCell cell = row.getCell(j);
  23.             // 输出获取到的数据
  24.             System.out.print(cell + "   ");
  25.         }
  26.         System.out.println();
  27.     }
  28.     // 8、释放资源
  29.     excel.close();
  30. }
复制代码
2.2.3、创建数据访问层接口和映射文件

  1. /**
  2. * poi写出数据到磁盘
  3. */
  4. @Test
  5. public void test3() throws Exception {
  6.     // 1、创建工作簿
  7.     XSSFWorkbook excel = new XSSFWorkbook();
  8.     // 2、创建工作簿中的表对象
  9.     XSSFSheet sheet = excel.createSheet("创建表");
  10.     // 3、创建第一行(表头)
  11.     XSSFRow row1 = sheet.createRow(0);
  12.     // 4、在行中创建单元格数据
  13.     row1.createCell(0).setCellValue("姓名");
  14.     row1.createCell(1).setCellValue("省份");
  15.     row1.createCell(2).setCellValue("城市");
  16.     row1.createCell(3).setCellValue("年龄");
  17.     // 5、创建第二行
  18.     XSSFRow row2 = sheet.createRow(1);
  19.     // 6、创建第6行的数据
  20.     row2.createCell(0).setCellValue("张三");
  21.     row2.createCell(1).setCellValue("辽宁");
  22.     row2.createCell(2).setCellValue("上海");
  23.     row2.createCell(3).setCellValue("50");
  24.     // 7、创建一个字节输出流,将数据保存到本地
  25.     FileOutputStream fileOutputStream = new FileOutputStream(new File("C:\\Users\\zhong\\Desktop\\aaa.xlsx"));
  26.     excel.write(fileOutputStream);
  27.     fileOutputStream.flush();
  28.     // 8、关闭输出
  29.     excel.close();
  30.     System.out.println("数据导出成功");
  31. }
复制代码
数据访问层映射文件编写SQL语句
  1. -- auto-generated definition
  2. create table t_ordersetting
  3. (
  4.     id           int auto_increment
  5.         primary key,
  6.     orderDate    date null comment '约预日期',
  7.     number       int  null comment '可预约人数',
  8.     reservations int  null comment '已预约人数'
  9. )
  10.     charset = utf8;
复制代码
3、批量导入数据测试

在上传模板上制作数据,然后进行导入,先导入新的数据再导入修改后日期不变的数据再次上传数据

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4