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越大,所测得性能越高. 上句来自网上,是不是 ...
随机推荐
- 深拷贝&浅拷贝
1.区别 浅拷贝:只拷贝了基本数据类型,引用数据类型只复制了引用,没有复制实体. 深拷贝:拷贝所有的层级属性 2.浅拷贝 (1) 直接赋值 拷贝之后,所有层级属性仍然公用了地址,会被影响 var a ...
- Python 极简教程(七)列表 list
由于列表过于重要,请认真看完并保证所有代码都敲过一遍. 什么是列表 列表是 Python 中最常用的数据结构,也是一种数据类型,其样式如下: li = [1, 2, 3, 'a', 'b'] 列表是一 ...
- ACCESS数据库改名asp或asa
到把mdb改为asp或asa ACCESS数据库:把数据库后缀名改成ASP是防止ACCESS数据库被下载
- 【Codeforces Round #432 (Div. 2) A】 Arpa and a research in Mexican wave
[链接]h在这里写链接 [题意] 在这里写题意 [题解] t<=k,输出t t>=n,输出k-t+n 其他情况都是k [错的次数] 0 [反思] 在这了写反思 [代码] /* */ #in ...
- JDBC高级特性(二)事务、并发控制和行集
一.事务 事务是指一个工作单元,它包括了一组加入,删除,改动等数据操作命令,这组命令作为一个总体向系统提交运行,要么都运行成功,要么所有恢复 在JDBC中使用事务 1)con.setAutoCommi ...
- (转)c++ 中的using namespace std是什么意思,什么时候用
使用std命名空间 98年以后的c++语言提供一个全局的命名空间namespace,可以避免导致全局命名冲突问题.举一个实例,请注意以下两个头文件: // one.hchar func(char);c ...
- UITextField用法
.创建 .UITextField* textField = [[UITextField alloc]initWithFrame:CGRectMake(, , , )]; .设置委托 //委托类需要遵守 ...
- Python代码优化及技巧笔记(一)
前言 这里是记录一些本人在开发过程中遇到的一些细节问题.与君共勉. 版权说明 著作权归作者全部.商业转载请联系作者获得授权,非商业转载请注明出处. 作者:Coding-Naga链接:http://bl ...
- php课程 8-28 php如何绘制生成显示图片
php课程 8-28 php如何绘制生成显示图片 一.总结 一句话总结:gd库轻松解决 1.php图片操作生成的图的两种去向是什么? 一种在页面直接输出,一种存进本地磁盘 2.php操作图片的库有哪些 ...
- get_slave_status.py
#!/usr/bin/env python#-*- encoding: utf8 -*- import mysql.connectorimport get_mysql_conn_info &qu ...