借助一些已有的库,这个功能很容易实现,但是如果你的数据量比较大,fastexcel是apache poi的一个很好的替代品。参考:
https://github.com/dhatim/fastexcel/
。另外hutool是一个集合很棒的工具,可以轻松操作数据库。它还有很多其他常用的功能,日期格式转换,字符串处理等。
参考:
https://github.com/dromara/hutool
package com.example.demo;
import cn.hutool.core.io.FileUtil;
import cn.hutool.db.DbUtil;
import cn.hutool.db.ds.simple.SimpleDataSource;
import org.dhatim.fastexcel.Color;
import org.dhatim.fastexcel.Workbook;
import org.dhatim.fastexcel.Worksheet;
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.OutputStream;
import java.time.Duration;
import java.time.LocalDateTime;
import java.util.List;
public class DataExportTest {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
/**
* export data to excel
*/
@Test
public void Test2() {
LocalDateTime start = LocalDateTime.now();
try (OutputStream os = FileUtil.getOutputStream("D:\\tmp\\TEST_DATA_2_EXCEL.xlsx")) {
SimpleDataSource ds = new SimpleDataSource("jdbc:mariadb://localhost:3306/litemall", "root", "rooter", "org.mariadb.jdbc.Driver");
List list = DbUtil.use(ds).query("SELECT TotalAmount from Payment_Data where CreatedAt like ?", String.class, "%04-07%");
Workbook wb = new Workbook(os, "MyApplication", "1.0");
Worksheet ws = wb.newWorksheet("Sheet 1");
ws.value(0, 0, "VendorPIAmount");
ws.style(0, 0).fillColor(Color.GRAY2).set();
for (int i = 0; i < list.size(); i++) {
ws.value(i + 1, 0, list.get(i));
}
wb.finish();
} catch (Exception e) {
logger.error("Error", e);
}
LocalDateTime end = LocalDateTime.now();
logger.info("Cost time {}", Duration.between(start, end).toMillis() + "ms");
}
}
依赖关系:
org.mariadb.jdbc
mariadb-java-client
2.7.4
org.dhatim
fastexcel-reader
0.12.12
cn.hutool
hutool-all
5.7.16
代码中使用的表是根据您的描述在本地mariadb数据库中创建的。 DDL如下。
-- ----------------------------
-- Table structure for payment_data
-- ----------------------------
DROP TABLE IF EXISTS `payment_data`;
CREATE TABLE `payment_data` (
`ID` bigint(20) NOT NULL AUTO_INCREMENT,
`CreatedAt` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
`TotalAmount` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
PRIMARY KEY (`ID`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of payment_data
-- ----------------------------
INSERT INTO `payment_data` VALUES (1, 'DCBA01-17ABCD', 'AAA');
INSERT INTO `payment_data` VALUES (2, 'DEDCB02-32BCDE', 'BBB');
INSERT INTO `payment_data` VALUES (3, 'ASDF04-07FDSA', 'CCC');
INSERT INTO `payment_data` VALUES (4, 'ZXCV04-07VCXZ', 'DDD');