<dependencies>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>1.1.1</version>
</dependency> <dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.9</version>
</dependency> <!-- jdbc -->
<dependency>
<groupId>commons-dbutils</groupId>
<artifactId>commons-dbutils</artifactId>
<version>1.7</version>
</dependency> <dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.2</version>
</dependency> <dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.40</version>
</dependency> </dependencies>

工具类

 package cn.tele.demo;

 import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.sql.DataSource;
import com.mchange.v2.c3p0.ComboPooledDataSource; /**
*
*@author Tele
*
*/ public class JdbcUtils {
private static ComboPooledDataSource dataSource = new ComboPooledDataSource(); public static Connection getConnection() throws SQLException {
return dataSource.getConnection();
} public static DataSource getDS() {
return dataSource;
} // 关闭数据库连接
public static void close(ResultSet rs, Statement stat, Connection conn) {
try {
if (rs != null)
rs.close();
if (stat != null)
stat.close();
if (conn != null)
conn.close();
} catch (SQLException e) {
e.printStackTrace();
} } }

实体类(模型)

 package cn.tele.demo;

 import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.metadata.BaseRowModel; /**
*
*@author Tele
*
*/ public class Student extends BaseRowModel{
@ExcelProperty(value="学号",index=0)
private Integer id; @ExcelProperty(value= {"姓名","name","xxx","xxx"},index=1)
private String name; @ExcelProperty(value="指导老师",index=2)
private String teacher; public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getTeacher() {
return teacher;
} public void setTeacher(String teacher) {
this.teacher = teacher;
} @Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", teacher=" + teacher + "]";
}
}

监听器

 package cn.tele.demo;

 import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List; import org.apache.commons.dbutils.QueryRunner; import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener; /**
*
*@author Tele
*
*/ public class ExcelListener extends AnalysisEventListener<Student>{ //自定义用于暂时存储data。
//可以通过实例获取该值
private List<Student> datas = new ArrayList<Student>(); //每解析一行调用一次invoke方法
public void invoke(Student object, AnalysisContext context) {
System.out.println("当前行:"+context.getCurrentRowNum());
System.out.println(object);
datas.add(object);//数据存储到list,供批量处理,或后续自己业务逻辑处理。
doSomething(datas);//根据自己业务做处理
} private void doSomething(List<Student> list) { } //解析结束后自动调用
public void doAfterAllAnalysed(AnalysisContext context) {
// datas.clear();//解析结束销毁不用的资源
//1、入库调用接口
QueryRunner runner = new QueryRunner(JdbcUtils.getDS());
String sql = "insert into student values(?,?,?)";
for(Student student:datas) {
try {
runner.update(sql, new Object[] {student.getId(),student.getName(),student.getTeacher()});
} catch (SQLException e) {
e.printStackTrace();
}
} System.out.println("数据更新完成");
try {
JdbcUtils.close(null,null,JdbcUtils.getConnection());
} catch (SQLException e) {
e.printStackTrace();
} }
public List<Student> getDatas() {
return datas;
}
public void setDatas(List<Student> datas) {
this.datas = datas;
} }

Demo

 package cn.tele.demo;

 import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.SQLException;
import java.util.List; import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.junit.Test; import com.alibaba.excel.ExcelReader;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.metadata.Sheet;
import com.alibaba.excel.support.ExcelTypeEnum; /**
* 读取Excel
*
* @author Tele
*
*/ public class Demo { /**
* 读取excel并插入mysql中 sheet第一个参数为sheetNo代表sheet的编号,第二个参数表示从第几行开始读,最小是1, new
* Sheet(1,0,Student.class)发现无输出结果
*
* @throws FileNotFoundException
*/
@SuppressWarnings("deprecation")
@Test
public void readExcel() throws FileNotFoundException {
InputStream inputStream = new FileInputStream("d:/excelTest/test.xlsx");
try {
// 解析每行结果在listener中处理
ExcelListener listener = new ExcelListener(); ExcelReader excelReader = new ExcelReader(inputStream, ExcelTypeEnum.XLSX, null, listener);
excelReader.read(new Sheet(1, 1, Student.class));
} catch (Exception e) { } finally {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} /**
* 查询测试
*/
@Test
public void queryByGroup() {
QueryRunner runner = new QueryRunner(JdbcUtils.getDS());
String sql = "SELECT * from student group by teacher,id";
try {
List<Student> query = runner.query(sql, new BeanListHandler<Student>(Student.class));
for (Student student : query) {
System.out.println(student.getName() + "----" + student.getTeacher());
} } catch (SQLException e) {
e.printStackTrace();
}
} /**
* 将查询结果写出到excel中 在写excel的过程中,含有模型的写入,对于sheet的第二个参数是忽略的,全部从左侧第一行进行读写
*/
@Test
public void writeExcel() {
try {
OutputStream os = new FileOutputStream(new File("d:/excelTest/new.xlsx"));
ExcelWriter writer = new ExcelWriter(os, ExcelTypeEnum.XLSX, true); // 2代表sheetNo,不可以重复,如果两个sheet的sheetNo相同则输出时只会有一个sheet
Sheet sheet1 = new Sheet(1, 5, Student.class);
sheet1.setSheetName("第一个sheet"); Sheet sheet2 = new Sheet(2, 1, Student.class);
sheet2.setSheetName("第二个sheet"); QueryRunner runner = new QueryRunner(JdbcUtils.getDS());
String sql = "SELECT * from student group by teacher,id"; List<Student> result = runner.query(sql, new BeanListHandler<Student>(Student.class));
writer.write(result, sheet1);
// writer.write(result,sheet2); writer.finish();
System.out.println("数据已写出");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} } }

easyexcel 读写测试的更多相关文章

  1. MIG IP控制DDR3读写测试

    本文设计思想采用明德扬至简设计法.在高速信号处理场合下,很短时间内就要缓存大量的数据,这时片内存储资源已经远远不够了.DDR SDRAM因其极高的性价比几乎是每一款中高档FPGA开发板的首选外部存储芯 ...

  2. 回看《例说FPGA》---DDR2控制器集成与读写测试

    回看<例说FPGA> ---DDR2控制器集成与读写测试 1.DDR2 IP核的配置 需要弄清楚的选项主要有: PLL reference clock frequency Memory c ...

  3. 第36章 SDIO—SD卡读写测试

    第36章     SDIO—SD卡读写测试 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/f ...

  4. 第36章 SDIO—SD卡读写测试—零死角玩转STM32-F429系列

    第36章     SDIO—SD卡读写测试 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/f ...

  5. 【Linux】磁盘读写 测试

    一.如何查看当前磁盘的IO使用情况 使用命令:iotop Total DISK READ: 3.89 K/s | Total DISK WRITE: 0.00 B/s TID PRIO USER DI ...

  6. 属性文件读写测试 PropertiesFileTest

    属性文件对于程序的拓展提供了很大的方便,但是什么该怎么去读写,怎么样读写才会最优呢?这里我做了一个简单的测试, 一般而言主要的有三种配置文件,*.ini,*.properties,*.xml,如果有兴 ...

  7. Redis集群模式下的redis-py-cluster方式读写测试

    与MySQL主从复制,从节点可以分担部分读压力不一样,甚至可以增加slave或者slave的slave来分担读压力,Redis集群中的从节点,默认是不分担读请求的,从节点只作为主节点的备份,仅负责故障 ...

  8. 朗科32G TF卡的读写测试

    卡是这样的, 下面是实际测试的结果. 容量测试 SKS的USB2外置读卡器, X240内置读卡器加上SD卡套    UNITEK的USB3.0读卡器, 经过UNITEK的USB3.0 HUB 看来读4 ...

  9. Linux dd工具磁盘读写测试分析

    话说,Linux 自带的dd工具测试硬盘读写速度只能提供一个大概的测试结果,而且是连续IO 而不是随机IO ,理论上文件规模越大,测试结果越准确.理论上bs越大,所测得性能越高. 上句来自网上,是不是 ...

随机推荐

  1. Django的命令

    安装django          : pip install django 创建django项目   :django-admin startproject projectname 启动django项 ...

  2. [UWP]为什么ContentControl的ContentTemplate里放两个ContentPresenter会出问题(绕口)

    原文:[UWP]为什么ContentControl的ContentTemplate里放两个ContentPresenter会出问题(绕口) 1. 简单的HeaderedContentControl 上 ...

  3. 日历控件input框默认显示当日日期

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <script sr ...

  4. PatentTips - Maintaining shadow page tables in a sequestered memory region

    BACKGROUND Malicious code, known as malware, which includes viruses, worms, adware, etc., may attack ...

  5. Altium Designer中死铜的问题

  6. springboot集成shiro 实现权限控制(转)

    shiro apache shiro 是一个轻量级的身份验证与授权框架,与spring security 相比较,简单易用,灵活性高,springboot本身是提供了对security的支持,毕竟是自 ...

  7. Android 蓝牙扫描代码

    /** * Created by rbq on 2016/11/1. */ import android.bluetooth.BluetoothAdapter; import android.blue ...

  8. decode与case when

    语法 decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) select * from reglike; ,),'aaa','yes','no') decode from ...

  9. hive SQL优化之distribute by和sort by

    近期在优化hiveSQL. 以下是一段排序,分组后取每组第一行记录的SQL INSERT OVERWRITE TABLE t_wa_funnel_distinct_temp PARTITION (pt ...

  10. VC/MFC中为程序定义全局快捷键

    VC 2010-05-01 18:01:34 阅读287 评论0 字号:大中小 订阅 1.注册快捷键 在初始化函数,如OnInitDialog() 注册快捷键,代码如下: #define HotKey ...