easyexcel 读写测试
<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 读写测试的更多相关文章
- MIG IP控制DDR3读写测试
本文设计思想采用明德扬至简设计法.在高速信号处理场合下,很短时间内就要缓存大量的数据,这时片内存储资源已经远远不够了.DDR SDRAM因其极高的性价比几乎是每一款中高档FPGA开发板的首选外部存储芯 ...
- 回看《例说FPGA》---DDR2控制器集成与读写测试
回看<例说FPGA> ---DDR2控制器集成与读写测试 1.DDR2 IP核的配置 需要弄清楚的选项主要有: PLL reference clock frequency Memory c ...
- 第36章 SDIO—SD卡读写测试
第36章 SDIO—SD卡读写测试 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/f ...
- 第36章 SDIO—SD卡读写测试—零死角玩转STM32-F429系列
第36章 SDIO—SD卡读写测试 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/f ...
- 【Linux】磁盘读写 测试
一.如何查看当前磁盘的IO使用情况 使用命令:iotop Total DISK READ: 3.89 K/s | Total DISK WRITE: 0.00 B/s TID PRIO USER DI ...
- 属性文件读写测试 PropertiesFileTest
属性文件对于程序的拓展提供了很大的方便,但是什么该怎么去读写,怎么样读写才会最优呢?这里我做了一个简单的测试, 一般而言主要的有三种配置文件,*.ini,*.properties,*.xml,如果有兴 ...
- Redis集群模式下的redis-py-cluster方式读写测试
与MySQL主从复制,从节点可以分担部分读压力不一样,甚至可以增加slave或者slave的slave来分担读压力,Redis集群中的从节点,默认是不分担读请求的,从节点只作为主节点的备份,仅负责故障 ...
- 朗科32G TF卡的读写测试
卡是这样的, 下面是实际测试的结果. 容量测试 SKS的USB2外置读卡器, X240内置读卡器加上SD卡套 UNITEK的USB3.0读卡器, 经过UNITEK的USB3.0 HUB 看来读4 ...
- Linux dd工具磁盘读写测试分析
话说,Linux 自带的dd工具测试硬盘读写速度只能提供一个大概的测试结果,而且是连续IO 而不是随机IO ,理论上文件规模越大,测试结果越准确.理论上bs越大,所测得性能越高. 上句来自网上,是不是 ...
随机推荐
- 13.constexpr
#include <iostream> using namespace std; //声明返回值为常量表达式 constexpr int get() { ; return num; } v ...
- 91.生成ini文件并写入和读取ini文件
写入 WritePrivateProfileStringA("hello money", infx[i].name, money, "1.ini"); 按照字符 ...
- 00089_字节输出流OutputStream
1.字节输出流OutputStream (1)OutputStream此抽象类,是表示输出字节流的所有类的超类.操作的数据都是字节,定义了输出字节流的基本共性功能方法: (2)输出流中定义都是写wri ...
- Java Web学习总结(16)——JSP的九个内置对象
一.JSP运行原理 每个JSP 页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理.JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet ...
- mybatis 嵌套查询子查询column传多个参数描述
https://my.oschina.net/softwarechina/blog/375762
- [D3] Modify DOM Elements with D3 v4
Once you can get hold of DOM elements you’re ready to start changing them. Whether it’s changing col ...
- 基于深度学习的人脸识别系统(Caffe+OpenCV+Dlib)【二】人脸预处理
前言 基于深度学习的人脸识别系统,一共用到了5个开源库:OpenCV(计算机视觉库).Caffe(深度学习库).Dlib(机器学习库).libfacedetection(人脸检测库).cudnn(gp ...
- [慕课笔记] node+mongodb建站攻略
如何利用node+mongodb来快速搭建一个电影网站? 一:后端部分 整个网站的后端是由node.js来驱动的,所以在后端需要安装node.js,以及在这个基础之上的框架express,它能够帮助我 ...
- Android(Lollipop/5.0) Material Design(四) 创建列表和卡片
Material Design系列 Android(Lollipop/5.0)Material Design(一) 简单介绍 Android(Lollipop/5.0)Material Design( ...
- nodejs+express4.0+mongodb安装方法 for Linux, Mac
废话不多说 1:下载nodejs包 下载地址例如以下:http://www.nodejs.org/download/ 下载source code版本号须要解压后到其文件夹运行./configure,然 ...