java导出 ORACEL数据库设计文档

博客提供了生成数据库设计文档PDF的Java示例。包含参考链接,展示了效果图,给出添加依赖的说明,还呈现了Java代码示例,涉及多个相关类的导入及一个生成PDF的类定义。
摘要由CSDN通过智能技术生成

参考链接

https://blog.csdn.net/aihan44413/article/details/101174948

效果图

在这里插入图片描述

添加依赖

	<dependency>
		<groupId>com.itextpdf</groupId>
		<artifactId>itextpdf</artifactId>
		<version>5.5.9</version>
	</dependency>

	<dependency>
		<groupId>com.itextpdf</groupId >
		<artifactId>itext-asian</artifactId>
		<version>5.2.0</version>
	</dependency>

java示例

import com.itextpdf.text.*;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;
import org.apache.commons.lang3.StringUtils;

import java.io.FileOutputStream;
import java.io.IOException;
import java.sql.;
import java.util.
;
import java.util.List;

/**

  • 生成数据库设计文档-PDF

*/
public class GenerateTablePdf {

/**
 * 字体
 *
 */
private static Font FONT;

/**
 * 键类型字典
 *
 */
private static Map<String,String> KEY_TYPE = new HashMap<>();

/**
 * 数据库连接url
 *
 */
private static String URL = "***";

/**
 * 数据库连接-用户名
 *
 */
private static String USER_NAME = "***";
/**
 * 数据库连接-密码
 *
 */
private static String PASSWORD = "***";
/**
 * 数据库查询所有表SQL
 *
 */
private static String SQL_GET_ALL_TABLES = "select a.TABLE_NAME,b.COMMENTS from user_tables a,user_tab_comments b WHERE a.TABLE_NAME=b.TABLE_NAME order by TABLE_NAME";
/**
 * 数据库查询表所有字段SQL
 *
 */
private static String SQL_GET_ALL_COLUMNS = "select T1.column_name,T1.data_type,T1.data_length,t2.comments,T1.NULLABLE,(select max(constraint_type)    from user_constraints x left join user_cons_columns y on x.constraint_name=y.constraint_name where x.table_name=t1.TABLE_NAME and y.COLUMN_NAME=T1.column_name)  from user_tab_cols t1, user_col_comments t2, user_tab_comments t3  where t1.TABLE_NAME=t2.table_name(+)  and t1.COLUMN_NAME=t2.column_name(+)  and t1.TABLE_NAME=t3.table_name(+)  and t1.TABLE_NAME='{table_name}' order by T1.COLUMN_ID ";

// 初始化jdbc
static{
    // 使用iTextAsian.jar包中的字体
    try {
        BaseFont baseFont = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
        FONT =  new Font(baseFont);
    } catch (DocumentException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    try {
        KEY_TYPE.put("P", "主键");
        Class.forName("oracle.jdbc.OracleDriver");
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }
}


public static void main(String[] args) throws Exception {
    export("F:\\数据库设计.pdf");
}


/**
 * 导出表字段属性
 *
 */
public static void export(String filePath) throws Exception {
    //初始化word文档
    Document document = new Document(PageSize.A4);
    PdfWriter.getInstance(document , new FileOutputStream(filePath));
    document.open();
    //查询开始
    Connection conn = getConnection();
    //获取所有表
    List tables = getDataBySQL(SQL_GET_ALL_TABLES,conn);
    int i=1;
    for (Iterator iterator = tables.iterator(); iterator.hasNext();) {
        String [] arr = (String []) iterator.next();
        // 循环获取字段信息
        System.out.print(i+".正在处理数据表-----------"+arr[0]);
        List columns = getDataBySQL(SQL_GET_ALL_COLUMNS.replace("{table_name}", arr[0]),conn);
        addTableDetail(arr[0], document,columns);
        addBlank(document);
        System.out.println("...done");
        i++;
    }
    document.close();
    conn.close();
}


/**
 * 添加空行
 *
 */
public static void addBlank(Document document)throws Exception{
    document.add(new Paragraph("\n\n\n\n\n\n"));
}



/**
 * 添加包含字段详细信息的表格
 */
public static void addTableDetail(String tableName, Document document,List columns)throws Exception{
    PdfPTable table = new PdfPTable(7);
    //表格的占比
    table.setWidthPercentage(100f);

    // 第一行
    BaseFont baseFont = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
    Font font =  new Font(baseFont);
    font.setColor(BaseColor.BLACK);

    String title;
    String comments = ((String[]) columns.iterator().next())[3];
    if (StringUtils.isBlank(comments)){
        title = tableName;
    }else {
        comments = comments.replace("id", "");
        comments = comments.contains("表") ? comments : comments + "表";
        title = tableName + "-" + comments;
    }
    PdfPCell head = new PdfPCell(new Paragraph(title, FONT));// 单元格
    head.setColspan(7);
    head.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE);
    head.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
    head.setBackgroundColor(BaseColor.GRAY);
    table.addCell(head);

    // 第二行
    PdfPCell cell1 = new PdfPCell(new Paragraph("序号", FONT));// 单元格
    PdfPCell cell2 = new PdfPCell(new Paragraph("列名", FONT));// 单元格
    PdfPCell cell3 = new PdfPCell(new Paragraph("类型", FONT));// 单元格
    PdfPCell cell4 = new PdfPCell(new Paragraph("长度", FONT));// 单元格
    PdfPCell cell5 = new PdfPCell(new Paragraph("键", FONT));// 单元格
    PdfPCell cell6 = new PdfPCell(new Paragraph("非空", FONT));// 单元格
    PdfPCell cell7 = new PdfPCell(new Paragraph("说明", FONT));// 单元格

    cell1.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE);
    cell2.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE);
    cell3.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE);
    cell4.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE);
    cell5.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE);
    cell6.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE);
    cell7.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE);

    cell1.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
    cell2.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
    cell3.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
    cell4.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
    cell5.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
    cell6.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
    cell7.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);

    table.addCell(cell1);
    table.addCell(cell2);
    table.addCell(cell3);
    table.addCell(cell4);
    table.addCell(cell5);
    table.addCell(cell6);
    table.addCell(cell7);

    // 主题内容
    int x = 1;
    for (Iterator iterator = columns.iterator(); iterator.hasNext();) {
        String [] arr2 = (String []) iterator.next();
        PdfPCell c1 = new PdfPCell(new Paragraph(x+"", FONT));
        PdfPCell c2 = new PdfPCell(new Paragraph(arr2[0], FONT));
        PdfPCell c3 = new PdfPCell(new Paragraph(arr2[1], FONT));
        PdfPCell c4 = new PdfPCell(new Paragraph(arr2[2], FONT));
        PdfPCell c5 = new PdfPCell(new Paragraph(KEY_TYPE.getOrDefault(arr2[5], ""), FONT));
        PdfPCell c6 = new PdfPCell(new Paragraph("Y".equals(arr2[4])?"否":"是", FONT));
        PdfPCell c7 = new PdfPCell(new Paragraph(arr2[3], FONT));

        c1.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE);
        c2.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE);
        c3.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE);
        c4.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE);
        c5.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE);
        c6.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE);
        c7.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE);

        c1.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
        c2.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
        c3.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
        c4.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
        c5.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
        c6.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
        c7.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);

        table.addCell(c1);
        table.addCell(c2);
        table.addCell(c3);
        table.addCell(c4);
        table.addCell(c5);
        table.addCell(c6);
        table.addCell(c7);
        x++;
    }
    document.add(table);
}

/**
 * 把SQL语句查询出列表
 */
public static List getDataBySQL(String sql,Connection conn){
    Statement stmt = null;
    ResultSet rs = null;
    List list = new ArrayList();
    try {
        stmt = conn.createStatement();
        rs = stmt.executeQuery(sql);
        while(rs.next()){
            String [] arr = new String[rs.getMetaData().getColumnCount()];
            for(int i=0;i<arr.length;i++){
                arr[i] = rs.getString(i+1);
            }
            list.add(arr);
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }finally{
        try {
            if(rs!=null){
                rs.close();
            }
            if(stmt!=null){
                stmt.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    return list;
}
/**
 * 获取数据库连接
 */
public static Connection getConnection(){
    try {
        return DriverManager.getConnection(URL, USER_NAME, PASSWORD);
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return null;
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值