淘特cms
當前位置:淘特CMS->幫助中心->常見問題
不到一百行代碼實現一個Mysql數據庫說明文檔自動生成程序
  • 作者:
  • 日期:2019/3/3 16:15:09
  • 出處:淘特CMS
  • 點擊:

我們在做軟件項目開發中,通常需要設計數據庫說明文檔,雖說有一些工具能幫我們實現,不過總是感覺太重了,有的時候我們是要邊寫代碼,查看數據庫結構,兩個軟件來回切換總是那么不習慣。這個問題作為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,那里面有個在線數據庫管理是可以兼容所有數據庫,有興趣的朋友可以去研究一下。

最新評論
用 戶:
內 容:
驗證碼:
伦敦奥运会网球比分