cms
当前位置:首页->常见问题
不到一百行代码实现一个Mysql数据库说明文档自动生成程序
  • 作者:本站
  • 日期:2019-03-03
  • 出处:totcms
  • 点击:243

我们在做软件项目开发中,通常需要设计数据库说明文档,虽说有一些工具能帮我们实现,不过总是感觉太重了,有的时候我们是要边写代码,查看数据库结构,两个软件来回切换总是那么不习惯。这个问题作为java攻城狮的我们,秉着发扬自己动手丰衣足食的品格,我们就手写一段程序,实现自动为指定的数据库生成说明文档的功能。

首先看一下程序的执行效果:


上面截图中,我们制作一个jsp程序,因为是jsp程序,这样我们可以通过pc、手机浏览器,只要输入程序网址,就会将指定数据库中所有表及每个表中的字段信息的属性都展示出来。我们公司通常都是每个小伙伴都把这个程序放在自己的web应用里,方便随时查看数据库信息。而且有了它,在设计数据库的时候,一边设计一边说明文档就有了,是不是很方便?):)

下面看一下代码的样子


jsp程序文件源代码:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.DatabaseMetaData"%>
<%@page import="java.sql.Statement"%>
<%@page import="java.sql.SQLException"%>
<%@page import="java.sql.ResultSetMetaData"%>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.Connection"%>
<%@page import="java.sql.Types"%>
<%out.clear();%>
<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>数据库说明文档</title>
    <style>
      h1{}
      h2{font-size:14px; margin: 0; padding: 0; line-height: 32px; font-weight: 100;}
      .fields{ width:800px;}
      .fields th{ background-color: #46b8da; line-height: 22px; text-align: left; padding:5px;}
      .fields td{ background-color: #f5f5f5; width: 25%; line-height: 22px; text-align: left; padding:5px;}
    </style>
  </head>
  <body>    
    <%      
      Connection conn = null;
      ResultSet rs = null,rs2=null;
      Statement stmt=null,stmt2=null;
      String dbname=request.getParameter("dbname");//你的数据库名称
      String dbuser="root";//你的数据库连接用户名
      String dbpassword="";//你的数据库连接密码
      try {
        conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1/"+dbname+"?useUnicode=true&amp;characterEncoding=UTF-8",dbuser,dbpassword);
        stmt=conn.createStatement();
        stmt2=conn.createStatement();
        //遍历查询数据库中的表
        rs =stmt.executeQuery("select table_name,table_comment from information_schema.tables where table_schema = '"+dbname+"'");
        while (rs.next()) {
          out.print("<h1>表名:"+rs.getString(1)+"</h1>\n");
          out.print("<h2>说明:"+rs.getString(2)+"</h2>\n");
          //查询表中的字段
          rs2=stmt2.executeQuery("show full fields from "+rs.getString(1));
          out.print("<table class=\"fields\" cellspacing=\"1\" cellpadding=\"0\">");
          out.print("<tr>");
          out.print("<th>名称</th>");
          out.print("<th>类型</th>");
          out.print("<th>默认值</th>");
          out.print("<th>备注</th>");
          out.print("</tr>");          
          while(rs2.next()){
            out.print("<tr>");
            out.print("<td>"+rs2.getString(1)+"</td>");
            out.print("<td>"+rs2.getString(2)+"</td>");
            out.print("<td>"+rs2.getString(6)+"</td>");
            out.print("<td>"+rs2.getString(9)+"</td>");
            out.print("</tr>");
          }          
          out.print("</table>");
        }
      } catch (SQLException e) {
      } finally {
        try {
          rs.close();
          rs2.close();
          stmt.close();
          stmt2.close();
          conn.close();
        } catch (Exception e) {
        }
      }
    %>
    
  </body>
</html>


代码第30行dbname变量即是要查看的数据库名称信息。其实我们也可以把这个变量设计为获取url参数来的值 ,比如

String dbname=request.getParameter("dbname");

这样,这个程序就可以支持多个数据库结构信息的查看了,方法就是我们在浏览器中访问的地址换成以下:


好了,代码比较简单,短短几十行代码搞定数据库文档。但需要注意的是因为这里采用的mysql的内置的表和sql语句获取表和字段的信息,因此对于其它类型的数据库是不起作用的。如果想要做一个兼容所有数据库的程序,可以参考一下jspcms,那里面有个在线数据库管理是可以兼容所有数据库,有兴趣的朋友可以去研究一下。