java导出mysql中的表格数据类型_Java 导出数据库表信息生成Word文档

本文介绍了如何使用Java和相关库如iText和MyBatis-Plus实现将数据库表信息导出为Word文档的功能,包括查询表数据、创建Word文档模板以及生成文件。通过实例演示,展示了从获取数据库表名、注释到生成详细表格的全过程。
摘要由CSDN通过智能技术生成

一、前言

最近看见朋友写了一个导出数据库生成word文档的业务,感觉很有意思,研究了一下,这里也拿出来与大家分享一波~

先来看看生成的word文档效果吧

下面我们也来一起简单的实现吧

二、Java 导出数据库表信息生成Word文档

温馨小提示:下面只是简单的展示一些主要代码,详情可参考文末给出的案例demo源码

基本环境spring-boot 2.1.8

mybatis-plus 2.2.0

mysql 数据库

1、新增依赖

com.lowagie

itext

2.1.7

com.itextpdf

itext-asian

5.2.0

com.lowagie

itext-rtf

2.1.7

2、查询表数据信息

@Mapper

public interface TableMapper {

/**

* 获取指定数据库下所有表名和注释

*

* @param dbName:数据库名

* @return: java.util.List

*/

@Select("select table_name as name,table_comment as comment from information_schema.tables where table_schema =#{dbName} order by table_name")

List getAllTables(@Param("dbName") String dbName);

/**

* 获取指定表信息

*

* @param tableName:表

* @return: java.util.List

*/

@Select("SHOW FULL FIELDS FROM ${tableName}")

List getTable(@Param("tableName") String tableName);

}

3、生成word文档实现类

@Service

public class TableService implements ITableService {

@Autowired

private TableMapper tableMapper;

@Autowired

private TableToWordUtil tableToWordUtil;

@Override

public String getTableInfo() {

// 1、获取数据库所有表信息

List tables = tableMapper.getAllTables(Constants.DATABASE);

// 2、生成文件名信息 - 年月日时分秒

String date = null;

try {

date = DateTimeUtils.dateFormat(new Date(), DateTimeUtils.PARSE_PATTERNS[12]);

} catch (ParseException e) {

e.printStackTrace();

}

String docFileName = Constants.FILE_PATH + "\\" + Constants.FILE_NAME + "-" + date + ".doc";

// 3、调用工具类生成文件

tableToWordUtil.toWord(tables, docFileName, Constants.FILE_NAME);

// 4、返回文件地址

String filePath = docFileName.replaceAll("\\\\", "/");

return filePath;

}

}

4、其中生成word文档工具类

@Service

public class TableToWordUtil {

@Autowired

TableMapper tableMapper;

/**

* 生成word文档

*

* @param tables:该数据库下所有表信息

* @param fileName:生成文件地址

* @param title:文件内容标题

* @return: void

*/

public void toWord(List tables, String fileName, String title) {

Document document = new Document(PageSize.A4);

try {

// 创建文件夹

File dir = new File(Constants.FILE_PATH);

dir.mkdirs();

// 创建文件

File file = new File(fileName);

if (file.exists() && file.isFile()) {

file.delete();

}

file.createNewFile();

// 写入文件信息

RtfWriter2.getInstance(document, new FileOutputStream(fileName));

document.open();

Paragraph ph = new Paragraph();

Font f = new Font();

Paragraph p = new Paragraph(title, new Font(Font.NORMAL, 24, Font.BOLDITALIC, new Color(0, 0, 0)));

p.setAlignment(1);

document.add(p);

ph.setFont(f);

for (int i = 0; i < tables.size(); i++) {

String table_name = tables.get(i).getName();

String table_comment = tables.get(i).getComment();

List fileds = tableMapper.getTable(tables.get(i).getName());

String all = "" + (i + 1) + " 表名称:" + table_name + "(" + table_comment + ")";

Table table = new Table(6);

document.add(new Paragraph(""));

table.setBorderWidth(1);

table.setPadding(0);

table.setSpacing(0);

//添加表头的元素,并设置表头背景的颜色

Color chade = new Color(176, 196, 222);

Cell cell = new Cell("编号");

addCell(table, cell, chade);

cell = new Cell("字段名");

addCell(table, cell, chade);

cell = new Cell("类型");

addCell(table, cell, chade);

cell = new Cell("是否非空");

addCell(table, cell, chade);

cell = new Cell("是否主键");

addCell(table, cell, chade);

cell = new Cell("注释");

addCell(table, cell, chade);

table.endHeaders();

// 表格的主体

for (int k = 0; k < fileds.size(); k++) {

addContent(table, cell, (k + 1) + "");

addContent(table, cell, fileds.get(k).getField());

addContent(table, cell, fileds.get(k).getType());

addContent(table, cell, fileds.get(k).getNull().equals("YES") ? "否" : "是");

addContent(table, cell, fileds.get(k).getKey() != "" ? "是" : "否");

addContent(table, cell, fileds.get(k).getComment());

}

Paragraph pheae = new Paragraph(all);

//写入表说明

document.add(pheae);

//生成表格

document.add(table);

}

document.close();

} catch (Exception e) {

e.printStackTrace();

}

}

/**

* 添加表头到表格

*

* @param table

* @param cell

* @param chade

*/

private void addCell(Table table, Cell cell, Color chade) {

cell.setHorizontalAlignment(Element.ALIGN_CENTER);

cell.setBackgroundColor(chade);

table.addCell(cell);

}

/**

* 添加内容到表格

*

* @param table

* @param content

*/

private void addContent(Table table, Cell cell, String content) {

cell = new Cell(content);

cell.setHorizontalAlignment(Element.ALIGN_CENTER);

table.addCell(cell);

}

}

5、其中的一些常量参数

public class Constants {

/**

* 需要生成word文档的数据库

*/

public static final String DATABASE = "demo";

/**

* 生成文件名前缀

*/

public static final String FILE_NAME = "测试数据库";

/**

* 生成文件地址

*/

public static String FILE_PATH = "D:\\www";

}

三、测试生成效果

小编在demo中提供了一个get请求的接口http://localhost:8080/api/tableToWord

接下来我们就可以去返回的地址中查看生成文件了

案例demo源码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值