我们在写数据库文档时,经常需要导出数据库结构和注释,我写了一个简单版本,大家拿来就可以用。不能用请打死我,不过是mysql数据库的。费话不多少,上菜。 一、依赖
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.12</version> </dependency>二、上图 1、每个mysql都会自动带有一个information_schema库,我们点开 ,进入下面的CLOUMNS表,看到的数据如图, carrant 使我们自己创建的数据,CLOUMNS表记录着我们每张表的表名,列明,可为空,备注,是否主键等等。所以我们只需要操作这张表就好了。 三、上代码,一气呵成,大家只需改成自己的数据库修改信息就可成功导出,具体如下 1.创建我们要导出的字段的实体类
package com.xzw.poiExcel; public class TableInfo { /* * * 这里我们可以自行观察CLOUMNS 表里的列和数据 自行创建需要的列 。。我个人觉得这些就够了 * */ private String COLUMN_NAME ; //列明 private String COLUMN_TYPE ; //数据类型 private String COLUMN_KEY; //主键 private String COLUMN_COMMENT; //备注 private String IS_NULLABLE; //是否为空 private String TABLE_NAME; //表名称 public String getIS_NULLABLE() { return IS_NULLABLE; } public void setIS_NULLABLE(String IS_NULLABLE) { this.IS_NULLABLE = IS_NULLABLE; } public String getTABLE_NAME() { return TABLE_NAME; } public void setTABLE_NAME(String TABLE_NAME) { this.TABLE_NAME = TABLE_NAME; } public String getCOLUMN_NAME() { return COLUMN_NAME; } public void setCOLUMN_NAME(String COLUMN_NAME) { this.COLUMN_NAME = COLUMN_NAME; } public String getCOLUMN_TYPE() { return COLUMN_TYPE; } public void setCOLUMN_TYPE(String COLUMN_TYPE) { this.COLUMN_TYPE = COLUMN_TYPE; } public String getCOLUMN_KEY() { return COLUMN_KEY; } public void setCOLUMN_KEY(String COLUMN_KEY) { this.COLUMN_KEY = COLUMN_KEY; } public String getCOLUMN_COMMENT() { return COLUMN_COMMENT; } public void setCOLUMN_COMMENT(String COLUMN_COMMENT) { this.COLUMN_COMMENT = COLUMN_COMMENT; } }2、导出部分代码
package com.xzw.poiExcel; import org.apache.poi.hssf.usermodel.HSSFCellStyle; import org.apache.poi.hssf.usermodel.HSSFFont; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import java.io.FileOutputStream; import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.util.HSSFColor; public class exportUtil { public static void main(String[] args) throws ClassNotFoundException, IOException, SQLException { hahaha(); } public static void hahaha() throws IOException, SQLException, ClassNotFoundException{ // TODO Auto-generated method stub Class.forName("com.mysql.jdbc.Driver"); Connection connection = DriverManager.getConnection("jdbc:mysql://101.201.***.151:3306/information_schema" ,"root" , "********" ); String sql="select COLUMN_NAME, COLUMN_TYPE, IS_NULLABLE, COLUMN_COMMENT, TABLE_NAME, COLUMN_KEY " + " from information_schema.columns " + " where information_schema.columns.TABLE_NAME= ? " //carrant 要生成表所在数据库名称 + " and information_schema.columns.TABLE_SCHEMA ='carrant'"; PreparedStatement prepareStatement = connection.prepareStatement(sql); //表名称 prepareStatement.setString(1, "car"); //即给sql赋值 ResultSet rs = prepareStatement.executeQuery(); //封装所有查出的数据 List<TableInfo> list=new ArrayList<>(); String s=""; while(rs.next()){ TableInfo tableInfo = new TableInfo(); tableInfo.setCOLUMN_NAME(rs.getString(1)); tableInfo.setCOLUMN_TYPE(rs.getString(2)); tableInfo.setIS_NULLABLE(rs.getString(3)); tableInfo.setCOLUMN_COMMENT(rs.getString(4)); tableInfo.setTABLE_NAME(rs.getString(5)); tableInfo.setCOLUMN_KEY(rs.getString(6)); s=tableInfo.getTABLE_NAME(); list.add(tableInfo); } //connection.close(); String fileName="表"+s+"的表结构"; HSSFWorkbook workbook = new HSSFWorkbook(); //创建Excel工作表对象 HSSFSheet sheet = workbook.createSheet(); sheet.setColumnWidth(0, 3000); sheet.setColumnWidth(1, 5000); sheet.setColumnWidth(2, 4000); sheet.setColumnWidth(3, 2500); sheet.setColumnWidth(4, 3000); sheet.setColumnWidth(5, 6000); sheet.setColumnWidth(6, 6000); // 设置表头字体样式 HSSFFont columnHeadFont = workbook.createFont(); columnHeadFont.setFontName("宋体"); columnHeadFont.setFontHeightInPoints((short) 10); columnHeadFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); // 列头的样式 HSSFCellStyle columnHeadStyle = workbook.createCellStyle(); columnHeadStyle.setFont(columnHeadFont); // 左右居中 columnHeadStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 上下居中 columnHeadStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); columnHeadStyle.setLocked(true); columnHeadStyle.setWrapText(true); // 左边框的颜色 columnHeadStyle.setLeftBorderColor(HSSFColor.BLACK.index); // 边框的大小 columnHeadStyle.setBorderLeft((short) 1); // 右边框的颜色 columnHeadStyle.setRightBorderColor(HSSFColor.BLACK.index); // 边框的大小 columnHeadStyle.setBorderRight((short) 1); // 设置单元格的边框为粗体 columnHeadStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 设置单元格的边框颜色 columnHeadStyle.setBottomBorderColor(HSSFColor.BLACK.index); // 设置单元格的背景颜色(单元格的样式会覆盖列或行的样式) columnHeadStyle.setFillForegroundColor(HSSFColor.WHITE.index); // 设置普通单元格字体样式 HSSFFont font = workbook.createFont(); font.setFontName("宋体"); font.setFontHeightInPoints((short) 10); //创建Excel工作表第一行 HSSFRow row0 = sheet.createRow(0); // 设置行高 row0.setHeight((short) 750); //设置单元格内容 //设置单元格字体样式 这里就是第一行的所有列的名称 例如 姓名 性别。。。。。 HSSFCell cell = row0.createCell(0); cell.setCellValue("名称"); cell.setCellStyle(columnHeadStyle); cell = row0.createCell(1); cell.setCellValue("数据类型"); cell.setCellStyle(columnHeadStyle); cell = row0.createCell(2); cell.setCellValue("主键"); cell.setCellStyle(columnHeadStyle); cell = row0.createCell(3); cell.setCellValue("注释"); cell.setCellStyle(columnHeadStyle); // 循环写入数据 for (int i = 0; i < list.size(); i++) { TableInfo tableInfo = list.get(i); HSSFRow row = sheet.createRow(i + 1); cell = row.createCell(0); cell.setCellValue(tableInfo.getCOLUMN_NAME()); cell.setCellStyle(columnHeadStyle); cell = row.createCell(1); cell.setCellValue(tableInfo.getCOLUMN_TYPE()); cell.setCellStyle(columnHeadStyle); //注释部分 我们可以根据查处的状态 例如1 2 赋予相应的值 如 删除 未删除 /*cell = row.createCell(3); if(tableInfo.getCOLUMN_KEY().equals("PRI")){ cell.setCellValue("YES"); }else{ cell.setCellValue("NO"); }*/ //主键 cell.setCellStyle(columnHeadStyle); cell = row.createCell(2); if(tableInfo.getCOLUMN_KEY().equals("PRI")){ cell.setCellValue("YES"); }else{ cell.setCellValue("NO"); } cell.setCellStyle(columnHeadStyle); cell = row.createCell(3); cell.setCellValue(tableInfo.getCOLUMN_COMMENT()); cell.setCellStyle(columnHeadStyle); } // String property = System.getProperty("user.home"); // System.out.println(property); FileOutputStream os = new FileOutputStream("D://"+s+".xls"); // 重置输出流 /* fileOutputStream.reset(); // 设定输出文件头 fileOutputStream.setHeader("Content-disposition", "attachment; filename=" + new String(fileName.getBytes("GB2312"), "8859_1") + ".xls"); // 定义输出类型 response.setContentType("application/msexcel");*/ workbook.write(os); os.flush(); os.close(); } }3 、去D盘,查看导出结果, 嘻嘻,,点个赞吧