不到一百行代碼實現(xiàn)一個Mysql數(shù)據(jù)庫說明文檔自動生成程序(mysql 代碼自動生成工具)
不到一百行代碼實現(xiàn)一個Mysql數(shù)據(jù)庫說明文檔自動生成程序(mysql 代碼自動生成工具)
我們在做軟件項目開發(fā)中,通常需要設計數(shù)據(jù)庫說明文檔,雖說有一些工具能幫我們實現(xiàn),不過總是感覺太重了,有的時候我們是要邊寫代碼,寫查看數(shù)據(jù)庫結構,兩個軟件來回切換總是那么不習慣。這個問題作為java攻城獅的我們,秉著發(fā)揚自己動手豐衣足食的品格,我們就手寫一段程序,實現(xiàn)自動為指定的數(shù)據(jù)庫生成說明文檔的功能。
首先看一下程序的執(zhí)行效果:
上面截圖中,我們制作一個jsp程序,因為是jsp程序,這樣我們可以通過pc、手機瀏覽器,只要輸入程序網址,就會將指定數(shù)據(jù)庫中所有表及每個表中的字段信息的屬性都展示出來。我們公司通常都是每個小伙伴都把這個程序放在自己的web應用里,方便隨時查看數(shù)據(jù)庫信息。而且有了它,在設計數(shù)據(jù)庫的時候,一邊設計一邊說明文檔就有了,是不是很方便?):)
下面看一下代碼的樣子
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>數(shù)據(jù)庫說明文檔</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=”totsdk”;//你的數(shù)據(jù)庫名稱
String dbuser=”root”;//你的數(shù)據(jù)庫連接用戶名
String dbpassword=””;//你的數(shù)據(jù)庫連接密碼
try {
conn = DriverManager.getConnection(“jdbc:mysql://127.0.0.1/” dbname “?useUnicode=true&characterEncoding=UTF-8”,dbuser,dbpassword);
stmt=conn.createStatement();
stmt2=conn.createStatement();
//遍歷查詢數(shù)據(jù)庫中的表
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變量即是要查看的數(shù)據(jù)庫名稱信息。其實我們也可以把這個變量設計為獲取url參數(shù)來的值 ,比如
String dbname=request.getParameter(“dbname”);
這樣,這個程序就可以支持多個數(shù)據(jù)庫結構信息的查看了,方法就是我們在瀏覽器中訪問的地址換成以下:
好了,代碼比較簡單,短短幾十行代碼搞定數(shù)據(jù)庫文檔。但需要注意的是因為這里采用的mysql的內置的表和sql語句獲取表和字段的信息,因此對于其它類型的數(shù)據(jù)庫是不起作用的。如果想要做一個兼容所有數(shù)據(jù)庫的程序,可以參考一下淘特jspcms,那里面有個在線數(shù)據(jù)庫管理是可以兼容所有數(shù)據(jù)庫,有興趣的朋友可以去研究一下。