根据数据库表结构生成Excel表设计——源码设计说明
根据数据库表结构生成Excel表设计
在系统运维的过程中,很多时候大家都不喜欢改文档,修改了数据库字段后很少同步再更新表设计文档的,这就导致系统运行一段时间后,系统表设计与实际生产跑业务的设计出入很大,这个时候一个个去核对费时费力。所以就根据对应表结构直接生成相应的设计文档,省时省力。
序号 | 内容 | 连接地址 |
---|---|---|
1 | 工具使用说明 | https://blog.csdn.net/qq_21271511/article/details/124940471 |
2 | 工具下载地址 | https://download.csdn.net/download/qq_21271511/85448701 |
3 | 源码设计说明 | https://blog.csdn.net/qq_21271511/article/details/125188813 |
4 | 源码下载地址 | https://download.csdn.net/download/qq_21271511/62264071 |
设计思路
查询相应数据库视图,设计Excel版式,使用jxl来读取写入数据库查询出来的数据。
分为三部分进行生成:
汇总信息,查询用户表结构和注释
索引信息,查询用户表索引及约束
明细信息,查询用户表及用户列明细
最后查询数据分别写入Excel。
汇总信息查询
String[] colstitle = {"表名","类型","用途"};try {ExcelUtil.createExcel(fileName, colstitle, "汇总");} catch (Exception e) {e.printStackTrace();throw new Exception("创建EXCEL失败",e);}//获取首页数据Connection conn = null;PreparedStatement ps = null;ResultSet rs = null;conn = JdbcUtil.getConnection();String sql = "select t.table_name 表名, t.TABLE_TYPE 类型, t.comments 用途" + " from user_tab_comments t" + " where t.TABLE_NAME in (select table_name from user_tables)" + " order by t.table_name";List<String> tableNames = new ArrayList<String>();List<String[]> dataList = new ArrayList<String[]>();try {ps = conn.prepareStatement(sql);rs = ps.executeQuery();while (rs.next()){String[] data = {rs.getString("表名"),rs.getString("类型"),rs.getString("用途")};tableNames.add(rs.getString("表名"));dataList.add(data);
// System.out.println("表名:" + rs.getString("表名") +
// "\t类型:" + rs.getString("类型") +
// "\t用途:" + rs.getString("用途")
// );}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();throw new Exception("查询表信息失败",e);} finally {JdbcUtil.close(conn, ps, rs);}
索引信息查询
//新增索引表内容String sql1 = "SELECT t.TABLE_NAME," + " t.INDEX_NAME," + " LISTAGG(t.COLUMN_NAME, ',') WITHIN GROUP(ORDER BY t.TABLE_NAME) INDEX_COLS" + " from user_ind_columns t, user_indexes i,user_tables ut" + " where t.index_name = i.index_name" + " and t.table_name = i.table_name" + " and ut.table_name = i.table_name" + " GROUP BY t.TABLE_NAME, t.INDEX_NAME";// 创建excel 表数据项String[] colstitle1 = { "表名", "索引名", "索引字段" };try {conn = JdbcUtil.getConnection();ExcelUtil.createSheet2(fileName, colstitle1, "表索引", 1);ps = conn.prepareStatement(sql1);rs = ps.executeQuery();while (rs.next()) {int rowIndex = ExcelUtil.getSheetLastLine(fileName, 1);String[] data = { rs.getString("TABLE_NAME"), rs.getString("INDEX_NAME"), rs.getString("INDEX_COLS") };System.out.println(rs.getString("TABLE_NAME") + "\t" + rs.getString("INDEX_NAME") + "\t"+ rs.getString("INDEX_COLS"));ExcelUtil.insertData(fileName, data, 1, rowIndex);}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();throw new Exception("查询索引表字段信息失败", e);} finally {JdbcUtil.close(conn, ps, rs);}
明细信息查询
//新增表内容String sql2 = "select t1.COLUMN_NAME 字段名," + " t2.DATA_TYPE 类型," + " t2.DATA_LENGTH 长度," + " t2.NULLABLE 能否为空," + " t1.COMMENTS 说明" + " from user_col_comments t1, cols t2" + " where t1.COLUMN_NAME = t2.COLUMN_NAME" + " and t1.TABLE_NAME = t2.TABLE_NAME" + " and t1.TABLE_NAME = ? " + " order by t1.COLUMN_NAME ";//创建excel 表数据项 String[] colstitle2 = {"字段名","类型","长度","能否为空","说明"};try {conn = JdbcUtil.getConnection();int i=0;for (i=0;i<tableNames.size();i++) {ExcelUtil.createSheet(fileName, colstitle2, tableNames.get(i), i+3);ps = conn.prepareStatement(sql2);ps.setString(1, tableNames.get(i));rs = ps.executeQuery();System.out.println("表名:\t"+tableNames.get(i));while (rs.next()){int rowIndex = ExcelUtil.getSheetLastLine(fileName, i+1);String[] data = {rs.getString("字段名"),rs.getString("类型"),rs.getString("长度"),rs.getString("能否为空"),rs.getString("说明")};System.out.println(rs.getString("字段名")+"\t"+rs.getString("类型")+"\t"+rs.getString("长度")+"\t"+rs.getString("能否为空")+"\t"+rs.getString("说明")); ExcelUtil.insertData(fileName, data, i+1, rowIndex);}
// break;}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();throw new Exception("查询表字段信息失败",e);} finally {JdbcUtil.close(conn, ps, rs);}
Excel操作
创建
public static String createSheet(String fileName, String[] colstitle, String sheetName, int sheetIndex)throws IOException, JXLException {File file = new File(dir + fileName + ".xls");Workbook workbook = Workbook.getWorkbook(file);WritableWorkbook workbook1 = Workbook.createWorkbook(file, workbook);WritableSheet sheet = workbook1.createSheet(sheetName, sheetIndex);//设置列宽sheet.setColumnView(0, 30);sheet.setColumnView(1, 20);sheet.setColumnView(2, 20);sheet.setColumnView(3, 80);// 单元格样式WritableFont wf = new WritableFont(WritableFont.ARIAL, 12, WritableFont.BOLD, false,UnderlineStyle.NO_UNDERLINE, jxl.format.Colour.BLACK); // 定义格式 字体 下划线 斜体 粗体 颜色WritableCellFormat wcf = new WritableCellFormat(wf); // 单元格定义wcf.setBackground(jxl.format.Colour.GREY_25_PERCENT); // 设置单元格的背景颜色wcf.setAlignment(jxl.format.Alignment.CENTRE); // 设置对齐方式// 5:单元格Label label = null;// 6:给第一行设置列名for (int i = 0; i < colstitle.length; i++) {// x,y,第一行的列名label = new Label(i, 0, colstitle[i], wcf);// 7:添加单元格sheet.addCell(label);}// 写入数据,一定记得写入数据,不然你都开始怀疑世界了,excel里面啥都没有workbook1.write();// 最后一步,关闭工作簿workbook1.close();return null;}
写入
public static String insertData(String fileName, String[] data,int sheetIndex, int rowIndex) throws Exception {File file = new File(dir + fileName + ".xls");Workbook workbook = Workbook.getWorkbook(file);WritableWorkbook workbook1 = Workbook.createWorkbook(file, workbook);WritableSheet sheet = workbook1.getSheet(sheetIndex);int i = rowIndex;Label label = null;for (i = 0; i < data.length; i++) {label = new Label(i, rowIndex, data[i]);sheet.addCell(label);}label = new Label(5, 0, "返回");sheet.addCell(label);WritableSheet sheet1 = workbook1.getSheet("汇总");WritableHyperlink link = new WritableHyperlink(5,0,"返回",sheet1,5,0);sheet.addHyperlink(link);// 写入数据,一定记得写入数据,不然你都开始怀疑世界了,excel里面啥都没有workbook1.write();// 最后一步,关闭工作簿workbook1.close();return null;}
相关sql语句
https://blog.csdn.net/qq_21271511/article/details/125196712
根据数据库表结构生成Excel表设计——源码设计说明相关推荐
- 根据数据库表结构生成Excel表设计——工具介绍
根据数据库表结构生成Excel表设计 最近又接手了一些老系统,库表设计啥的都没有,十来个系统,每个系统都几十张表,一个个的补感觉太难了,合计了一下感觉还是搞个工具比较好. 在系统运维的过程中,很多时候 ...
- asp.netNBA信息管理系统VS开发sqlserver数据库web结构c#编程计算机网页源码项目详细设计
一.源码特点 asp.net NBA信息管理系统 是一套完善的web设计管理系统,系统具有完整的源代码和数据库,开发环境为vs2010,数据库为sqlserver2008,使用c#语言 ...
- asp.net学生信息管理系统VS开发sqlserver数据库web结构c#编程计算机网页源码项目
一.源码特点 ASP.NET C# 学生信息管理系统是一套完善的web设计管理系统,系统具有完整的源代码和数据库,系统主要采用B/S模式开发,开发环境为vs2010,数据库为sqlse ...
- 计算机毕业设计asp.net考试安排管理系统VS开发sqlserver数据库web结构c#编程计算机网页源码项目
一.源码特点 asp.net 考试安排管理系统 是一套完善的web设计管理系统,系统具有完整的源代码和数据库,系统主要采用B/S模式开发,开发环境为vs2010,数据库为sqlserver2 ...
- asp.net摄影网站系统VS开发sqlserver数据库web结构c#编程计算机网页源码项目
一.源码特点 ASP.NET C# 摄影网站系统 是一套完善的web设计管理系统,系统具有完整的源代码和数据库,系统主要采用B/S模式开发.开发环境为vs2010,数据库为sqlser ...
- asp.net毕业生信息管理系统VS开发sqlserver数据库web结构c#编程计算机网页源码项目
一.源码特点 asp.net 毕业生信息管理系统 是一套完善的web设计管理系统,系统具有完整的源代码和数据库,系统主要采用B/S模式开发.开发环境为vs2010,数据库为sqlse ...
- 计算机毕业设计asp.net考勤管理系统VS开发sqlserver数据库web结构c#编程计算机网页源码项目
一.源码特点 ASP.NET C# 考勤管理系统 是一套完善的web设计管理系统,系统具有完整的源代码和数据库,系统主要采用B/S模式开发,开发环境为vs2010,数据库为sqlser ...
- asp.net医院信息管理系统VS开发sqlserver数据库web结构c#编程计算机网页源码项目
一.源码特点 asp.net 医院信息管理系统是一套完善的web设计管理系统,系统具有完整的源代码和数据库,系统主要采用B/S模式开发,开发环境为vs2010,数据库为sqlserve ...
- asp.net网上商城系统VS开发sqlserver数据库web结构c#编程计算机网页源码项目
一.源码特点 asp.net 网上商城系统是一套完善的web设计管理系统,系统具有完整的源代码和数据库,系统主要采用B/S模式开发,开发环境为vs2010,数据库为sqlserver2 ...
最新文章
- Makefile所有内嵌函数
- BCH欢迎ETH使用BCH作为数据层
- leetcode算法题--重建二叉树
- 蓝桥备赛第二周 前缀和
- eclipse 导入maven项目_手把手的Spring Boot Web 项目教程,Hello Spring Boot
- 李春雷 | 夜宿棚花村
- 建立、遍历二叉树(二叉链表)
- SpringBoot配置详解
- 威马董事长沈晖隔空喊话王兴:威马一定会是Top3之一
- 使用EntityFramework Core和Enums作为字符串的ASP.NET Core Razor页面——第二部分
- mysql 安装绑定my.ini
- Failure to find com.rongpd:rpd:pom:1.0 in xxx was cached in the local repository, resolution will no
- makefile问题:“makefile:2: *** 遗漏分隔符 。 停止。”
- 科研画图都用什么软件?
- C语言中cvpoint后运行出错,c++ - 使用cvCreateSeq时出现未处理的异常 - 堆栈内存溢出...
- Ansible—— 29. 通过set_fact模块定义变量
- html视频没有注册类,win10播放视频显示没有注册类怎么解决
- 盒子竞争激烈 Apple TV在美仅排第三
- Jquery版本对IE浏览器的支持
- SD卡变成RAW格式怎么办?SD卡RAW格式的解决办法