当前位置: 首页 > news >正文

java将mysql表结构写入到word表格中

文章目录

  • 需要的依赖

需要的依赖

<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.9</version>
</dependency>
<!--07版本的,行数不受限制-->
<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.9</version>
</dependency>
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId>
</dependency>

相关代码

@Slf4j
public class ConstructionToWord {private final String DRIVER = "com.mysql.cj.jdbc.Driver";//private final String DRIVER = "com.mysql.cj.jdbc.Driver";private final String URL = "jdbc:mysql://localhost:3306/数据库名称"+"?useUnicode=true&characterEncoding=utf8&useSSL=false";private final String USER_NAME = "";private final String PASS_WORD = "";private final String database = "数据库名称";private final String reportPath = "word文档生成路径";// 启动方法public static void main(String[] args) {try {ConstructionToWord rd = new ConstructionToWord();rd.report();}catch (Exception e){e.printStackTrace();}}Connection conn = null;PreparedStatement pst = null;ResultSet rs = null;// 获取查询数据public Map<String, List<TableColumn>> getData() throws Exception{System.out.println("数据生成中,请稍等...");Map<String,List<TableColumn>> map = new HashMap<String,List<TableColumn>>();List<Table> tables = getTables(database);for (Table table : tables) {List<TableColumn> columns = getColumns(database,table.getTableName());map.put(table.getTableName(),columns);}return map;}// 获取表字段信息public List<TableColumn>  getColumns(String database,String tableName) throws Exception{String sql = "select column_name,data_type, character_maximum_length,is_nullable,column_comment from information_schema.columns  where  table_schema=? and table_name=?";ResultSet rs = getConn(database,tableName,sql);List<TableColumn> tableColumns = new ArrayList<TableColumn>();while (rs.next()){TableColumn tc = new TableColumn();tc.setTableName(tableName);tc.setColumnName(rs.getString("column_name"));tc.setColumnType(rs.getString("data_type"));tc.setColumnSize(rs.getString("character_maximum_length"));tc.setIsNullable(rs.getString("is_nullable"));tc.setColumnComment(rs.getString("column_comment"));tableColumns.add(tc);}releaseConn();return tableColumns;}// 获取所有表public List<Table> getTables(String database) throws Exception{String  sql = "select table_name,table_comment from information_schema.tables where table_schema=?";ResultSet rs = getConn(database, "",sql);List<Table> tables = new ArrayList<Table>();while(rs.next()){Table table = new Table();table.setTableName(rs.getString( "table_name"));table.setTableCommont(rs.getString("table_comment"));tables.add(table);}releaseConn();return  tables;}// 连接数据库private ResultSet getConn(String dataBase,String tableName,String sql){try{log.info("1231qweqwe {}", sql);Class.forName(DRIVER);conn = DriverManager.getConnection(URL,USER_NAME,PASS_WORD);pst = conn.prepareStatement(sql);pst.setString(1,dataBase);if(!"".equals(tableName)){pst.setString(2,tableName);}rs = pst.executeQuery();return  rs;}catch (Exception e){e.printStackTrace();}return null;}// 释放连接private void  releaseConn(){try{if(rs != null ){rs.close();}if(pst != null){pst.close();}if(conn != null){conn.close();}}catch (Exception e){e.printStackTrace();}}// 导出数据public void report()  throws  Exception{Map<String, List<TableColumn>> data = this.getData();       // 表名:表体List<Table> tables = this.getTables(this.database);         // 表体(列名、类型、注释)Map<String,String> tableMap = new HashMap<String,String>();              // 表名:中文名JSONObject json = new JSONObject((HashMap)data);for (Table table : tables) {tableMap.put(table.getTableName(),table.getTableCommont());}// 构建表格数据XWPFDocument document = new XWPFDocument();Integer i = 1;for (String tableName : data.keySet()) {XWPFParagraph paragraph = document.createParagraph();                // 创建标题对象XWPFRun run = paragraph.createRun();                                 // 创建文本对象run.setText((i+"、"+tableName+"    "+tableMap.get(tableName)));      // 标题名称run.setFontSize(14);                                                 // 字体大小run.setBold(true);                                                   // 字体加粗int j = 0;XWPFTable table = document.createTable(data.get(tableName).size()+1,5);// 第一行table.setCellMargins(10,50,10,200);table.getRow(j).getCell(0).setText("字段名称");table.getRow(j).getCell(1).setText("字段类型");table.getRow(j).getCell(2).setText("字段长度");table.getRow(j).getCell(3).setText("为空");table.getRow(j).getCell(4).setText("字段含义");j++;for (TableColumn tableColumn : data.get(tableName)) {table.getRow(j).getCell(0).setText(tableColumn.getColumnName());table.getRow(j).getCell(1).setText(tableColumn.getColumnType());table.getRow(j).getCell(2).setText(tableColumn.getColumnSize());table.getRow(j).getCell(3).setText(tableColumn.getIsNullable());table.getRow(j).getCell(4).setText(tableColumn.getColumnComment());j++;}i++;}// 文档输出FileOutputStream out = new FileOutputStream(reportPath + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()).toString()+"_"+database +".docx");document.write(out);out.close();System.out.println("Word生成完成!!!");}// 表class Table{private String tableName;private String tableCommont;public String getTableName() {return tableName;}public void setTableName(String tableName) {this.tableName = tableName;}public String getTableCommont() {return tableCommont;}public void setTableCommont(String tableCommont) {this.tableCommont = tableCommont;}}// 表列信息class TableColumn{// 表名private String tableName;// 字段名private String columnName;// 字段类型private String columnType;// 字段长度private String columnSize;// 字段注释private String columnComment;// 可否为空private String isNullable;// 约束private String columnKey;public String getColumnSize() {return columnSize;}public void setColumnSize(String columnSize) {this.columnSize = columnSize;}public String getTableName() {return tableName;}public void setTableName(String tableName) {this.tableName = tableName;}public String getColumnName() {return columnName;}public void setColumnName(String columnName) {this.columnName = columnName;}public String getColumnType() {return columnType;}public void setColumnType(String columnType) {this.columnType = columnType;}public String getColumnComment() {return columnComment;}public void setColumnComment(String columnComment) {this.columnComment = columnComment;}public String getIsNullable() {return isNullable;}public void setIsNullable(String isNullable) {this.isNullable = isNullable;}public String getColumnKey() {return columnKey;}public void setColumnKey(String columnKey) {this.columnKey = columnKey;}}
}

可以通过SELECT * FROM information_schema.columns WHERE table_schema= '数据库名' AND TABLE_NAME= '表名';查看指定库下表的结构,可以查询哪些指标

相关文章:

java将mysql表结构写入到word表格中

文章目录 需要的依赖 需要的依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.9</version> </dependency> <!--07版本的&#xff0c;行数不受限制--> <dependency>&l…...

SpringBoot教程(安装篇) | Docker Desktop的安装(Windows下的Docker环境)

SpringBoot教程&#xff08;安装篇&#xff09; | Docker Desktop的安装&#xff08;Windows下的Docker环境&#xff09; 前言如何安装Docker Desktop资源下载安装启动&#xff08;重点&#xff09;1. 检查 bcdedit的hypervisorlaunchtype是否为Auto2. 检查CPU是否开启虚拟化3.…...

day2网络编程项目的框架

基于终端的 UDP云聊天系统 开发环境 Linux 系统GCCUDPmakefilesqlite3 功能描述 通过 UDP 网络使服务器与客户端进行通信吗&#xff0c;从而实现云聊天。 Sqlite数据库 用户在加入聊天室前&#xff0c;需要先进行用户登录或注册操作&#xff0c;并将注册的用户信息&#xf…...

C++和OpenGL实现3D游戏编程【连载13】——多重纹理混合详解

🔥C++和OpenGL实现3D游戏编程【目录】 1、本节要实现的内容 前面说过纹理贴图能够大幅提升游戏画面质量,但纹理贴图是没有叠加的。在一些游戏场景中,要求将非常不同的多个纹理(如泥泞的褐色地面、绿草植密布的地面、碎石遍布的地面)叠加(混合)起来显示,实现纹理间能够…...

探索云计算中的 Serverless 架构:未来的计算范式?

目录 引言 一、Serverless架构概览 二、Serverless 架构的优势 三、Serverless架构的挑战 四、Serverless架构的未来展望 五、结论 引言 在当今快速发展的 IT 行业中&#xff0c;云计算无疑占据了举足轻重的地位。随着技术的不断演进&#xff0c;云计算的一个新兴分支——…...

爬虫及数据可视化——运用Hadoop和MongoDB数据进行分析

作品详情  运用Hadoop和MongoDB对得分能力数据进行分析&#xff1b;  运用python进行机器学习的模型调理&#xff0c;利用Pytorch框架对爬取的评论进行情感分析预测&#xff1b;  利用python和MySQL对网站的数据进行爬取、数据清洗及可视化。...

扩散引导语言建模(DGLM):一种可控且高效的AI对齐方法

随着大型语言模型(LLMs)的迅速普及,如何有效地引导它们生成安全、适合特定应用和目标受众的内容成为一个关键挑战。例如,我们可能希望语言模型在与幼儿园孩子互动时使用不同的语言,或在撰写喜剧小品、提供法律支持或总结新闻文章时采用不同的风格。 目前,最成功的LLM范式是训练…...

LeetCode hot100---数组及矩阵专题(C++语言)

1、最大子数组和 &#xff08;1&#xff09;题目描述以及输入输出 (1)题目描述: 给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 (2)输入输出描述&#xff1a; 输入&#…...

LabVIEW提高开发效率技巧----快速实现原型和测试

在LabVIEW开发中&#xff0c;DAQ助手&#xff08;DAQ Assistant&#xff09;和Express VI为快速构建原型和测试功能提供了极大的便利&#xff0c;特别适合于简单系统的开发和早期验证阶段。 DAQ助手&#xff1a;是一种可视化配置工具&#xff0c;通过图形界面轻松设置和管理数据…...

大论文记录

基础知识回顾 1.强化学习&#xff08;Agent、Environment) 在 RL 中&#xff0c;代理通过不断与环境交互、以试错的方式进行学习&#xff0c;在不确定性下做出顺序决策&#xff0c;并在探索&#xff08;新领域&#xff09;和开发&#xff08;使用从经验中学到的知识&#xff…...

蘑菇分类检测数据集 21类蘑菇 8800张 带标注 voc yolo

蘑菇分类检测数据集 21类蘑菇 8800张 带标注 v 蘑菇分类检测数据集 21类蘑菇 8800张 带标注 voc yolo 蘑菇分类检测数据集介绍 数据集名称 蘑菇分类检测数据集 (Mushroom Classification and Detection Dataset) 数据集概述 该数据集专为训练和评估基于YOLO系列目标检测模型…...

dockerhub 镜像拉取超时的解决方法

在几个月前&#xff0c;因为一些原因&#xff0c;导致 dockerhub 官网上面的镜像拉取超时&#xff0c;目前可以通过修改仓库地址&#xff0c;通过 daocloud 拉取 public-image-mirror 方式一 源仓库替换仓库cr.l5d.iol5d.m.daocloud.iodocker.elastic.coelastic.m.daocloud.io…...

私家车开车回家过节会发生什么事情

自驾旅行或者是自驾车回家过节路程太远。长途奔袭的私家车损耗很大。新能源汽车开始涉足电力系统和燃电混动的能源供应过渡方式。汽车在路途中出现零件故障。计划的出发日程天气原因。台风是否会提醒和注意。汽车的油站供应链和电力充电桩的漫长充电过程。高速公路的收费站和不…...

正则表达式的使用示例--Everything文件检索批量重命名工具

一、引言 Everything是一款非常实用的文件搜索工具&#xff0c;它可以帮助您快速定位并查找计算机中的文件和文件夹。Everything搜索文件资料之神速&#xff0c;有使用过的朋友们都深有体会&#xff0c;相对于Windows自带的搜索功能&#xff0c;使用Everything&#xff0c;可以…...

centos环境安装JDK详细教程

centos环境安装JDK详细教程 一、前期准备二、JDK安装2.1 rpm方式安装JDK2.2 zip方式安装JDK2.3 yum方式安装JDK 本文主要说明CentOS下JDK的安装过程。JDK的安装有三种方式&#xff0c;用户可根据实际情况选择&#xff1a; 一、前期准备 查看服务器操作系统型号&#xff0c;执…...

Spring Cloud全解析:服务调用之OpenFeign集成OkHttp

文章目录 OpenFeign集成OkHttp添加依赖配置连接池yml配置 OpenFeign集成OkHttp OpenFeign本质是HTTP来进行服务调用的&#xff0c;也就是需要集成一个Http客户端。 使用的是Client接口来进行请求的 public interface Client {// request是封装的请求方式、参数、返回值类型/…...

前端算法合集-1(含面试题)

(这是我面试一家中厂公司的二面算法题) 数组去重并按出现次数排序 题目描述: 给定一个包含重复元素的数组&#xff0c;请你编写一个函数对数组进行去重&#xff0c;并按元素出现的次数从高到低排序。如果次数相同&#xff0c;则按元素值从小到大排序。 let arr [2, 11,10, 1…...

影刀---如何进行自动化操作

本文不是广告&#xff0c;没有人给我宣传费&#xff0c;只是单纯的觉得这个软件很好用 感谢大家的多多支持哦 本文 1.基本概念与操作&#xff08;非标准下拉框和上传下载&#xff09;非标准对话框的操作上传对话框、下载的对话框、提示的对话框 2.综合案例3.找不到元素怎么办&a…...

146. LRU 缓存【 力扣(LeetCode) 】

零、原题链接 146. LRU 缓存 一、题目描述 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类&#xff1a; LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中&#xff…...

【算法】链表:92.反转链表(medium)+双指针

系列专栏 《分治》 《模拟》 《Linux》 目录 1、题目链接 2、题目介绍 3、解法 &#xff08;双指针&#xff09; 4、代码 是 206. 反转链表 - 力扣&#xff08;LeetCode&#xff09;的类型题&#xff0c;且难度提升&#xff0c;可以先完成206&#xff0c;然后参照206的…...

索尼IMX811如何重塑工业视觉与专业影像的边界

突破像素极限&#xff0c;定义成像新高度在影像技术飞速发展的今天&#xff0c;高分辨率始终是专业领域不懈追求的目标。索尼半导体解决方案公司重磅推出的IMX811中画幅CMOS图像传感器&#xff0c;以2.47亿有效像素的惊人规格&#xff0c;为行业带来了颠覆性的突破。这款传感器…...

手机上还有免费编辑pdf文本的软件?!

说的就是这款软件&#xff1a;pdfgear 适合哪些朋友&#xff1a;平板电脑、手机轻度办公用户。 这款软件算是为数不多良心软件了。 支持常见的pdf批注&#xff1a;高亮、删除线、下划线等。 主要还有一个很好的功能就是文字编辑功能&#xff1a;不需要切换word就能直接对pdf进行…...

群晖SSH远程访问全链路打通指南

1. 为什么群晖的SSH不是“开个开关”就完事的很多人第一次在群晖DSM界面里点开“控制面板 > 终端机和SNMP > 启用SSH服务”&#xff0c;看到端口22打钩、状态显示“已启用”&#xff0c;就以为大功告成&#xff0c;兴冲冲拿Mac或Windows的终端连一下——结果ssh admin192…...

基于SpringBoot 的实验设备预约系统的设计及实现

摘 要 随着高校与科研院所实验教学规模扩大&#xff0c;传统人工预约实验设备效率低、易冲突、管理混乱&#xff0c;已无法满足师生需求。为提升设备利用率、规范预约流程、减少时间冲突与资源浪费&#xff0c;构建一套基于网络的实验设备预约系统十分必要。该系统可实现在线预…...

深入理解Android中startActivity的完整流程:聚焦IPC机制与Binder原理

引言 在Android开发中,startActivity() 方法是启动新Activity的核心API,它贯穿了应用的生命周期管理。理解其内部流程,不仅有助于优化性能、避免常见错误,还能提升开发者在面试中的竞争力。本文将以“一次完整的 startActivity 到底经历了什么”为主题,深入探讨整个流程,…...

别再手搓动画了!用PS搞定微信小程序GIF单次播放(附2022版安装包)

微信小程序GIF动画高效制作指南&#xff1a;从PS设计到开发落地全流程 在微信小程序开发中&#xff0c;动画效果的实现往往让开发者陷入两难选择&#xff1a;要么花费大量时间手写Canvas动画代码&#xff0c;要么寻找更高效的视觉呈现方案。当遇到需要精确控制播放次数的动画需…...

ESXi安装卡在网卡识别?除了打驱动,你还可以试试这个国产替代方案FreeVM

ESXi网卡兼容性困境&#xff1a;为何国产FreeVM可能更适合你的虚拟化需求 当你第5次重启ESXi安装程序&#xff0c;屏幕上依然显示"No Network Adapters"的红色报错时&#xff0c;那种挫败感任何IT从业者都深有体会。硬件兼容性问题——这个困扰虚拟化领域多年的顽疾&…...

Centurion配置详解:从零开始编写你的第一个部署脚本

Centurion配置详解&#xff1a;从零开始编写你的第一个部署脚本 【免费下载链接】centurion A mass deployment tool for Docker fleets 项目地址: https://gitcode.com/gh_mirrors/ce/centurion Centurion是一款强大的Docker集群批量部署工具&#xff0c;能够帮助开发者…...

uView 2.0自定义主题开发:颜色配置与样式覆盖的详细步骤

uView 2.0自定义主题开发&#xff1a;颜色配置与样式覆盖的详细步骤 【免费下载链接】uView2.0 uView UI&#xff0c;是全面兼容nvue的uni-app生态框架&#xff0c;全面的组件和便捷的工具会让您信手拈来&#xff0c;如鱼得水 项目地址: https://gitcode.com/gh_mirrors/uv/u…...

设计师私藏的11个纹理Prompt原子模块(仅限本周开放下载:含PBR贴图映射表+光照反射系数速查卡)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;纹理Prompt原子模块的设计哲学与底层逻辑 纹理Prompt原子模块并非简单拼接关键词的字符串生成器&#xff0c;而是以认知建模为根基、以可组合性为约束、以语义保真度为校验目标的结构化表达系统。其设计…...