poi导出表结构以及字段注释生成excel -----------mysql数据库
我们在写数据库文档时,经常需要导出数据库结构和注释,我写了一个简单版本,大家拿来就可以用。不能用请打死我,不过是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盘,查看导出结果,
嘻嘻,,点个赞吧