1. 程式人生 > >生成資料庫設計文件(目前只支援mysql)

生成資料庫設計文件(目前只支援mysql)

生成類

package com.zcj.unittest;

import java.io.File;
import java.io.FileOutputStream;
import java.math.BigInteger;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.apache.commons.io.FileUtils;
import org.apache.poi.xwpf.usermodel.ParagraphAlignment;
import org.apache.poi.xwpf.usermodel.TextAlignment;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.apache.poi.xwpf.usermodel.XWPFTableCell;
import org.apache.poi.xwpf.usermodel.XWPFTableRow;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTbl;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblPr;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblWidth;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTc;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTcPr;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STTblWidth;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.zcj.config.SpringConfig;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = { SpringConfig.class })
public class MyTest {
	@Value("${data_name}")
	private String dataName;
	@Value("${doc_dir_path}")
	private String docDirPath;
	@Autowired
	DriverManagerDataSource driverManagerDataSource;
	@Autowired
	JdbcTemplate jdbcTemplate;

	@Test
	public void test() {
		createWord();
	}

	/**
	 * 生成資料庫設計文件
	 */
	public void createWord() {
		XWPFDocument xdoc = new XWPFDocument();
		XWPFParagraph title = xdoc.createParagraph();
		title.setAlignment(ParagraphAlignment.CENTER);
		XWPFRun rt = title.createRun();
		rt.setBold(true);
		rt.setFontFamily("微軟雅黑");
		rt.setText(dataName+"資料庫設計文件");
		rt.setFontSize(20);
		rt.setColor("333333");
		rt.setBold(true);

		Map<String, String[][]> datas = dataInfo(dataName);
		Set<String> keySet = datas.keySet();
		for (String table : keySet) {
			XWPFParagraph headLine1 = xdoc.createParagraph();
			headLine1.setAlignment(ParagraphAlignment.LEFT);
			XWPFRun runHeadLine1 = headLine1.createRun();
			runHeadLine1.setText(table);
			runHeadLine1.setFontSize(14);
			runHeadLine1.setFontFamily("微軟雅黑");
			runHeadLine1.setColor("a6a6a6");

			String[][] clumns = datas.get(table);

			XWPFTable dTable = xdoc.createTable(clumns.length + 1, 3);
			createTable(dTable, xdoc, clumns);
			setEmptyRow(xdoc, rt);
		}
		// 在伺服器端生成
		FileOutputStream fos = null;
		try {
			String docPath = docDirPath+File.separator+dataName+"_"+(new Date()).getTime()+".docx";
			FileUtils.forceMkdirParent(new File(docPath));
			fos = new FileOutputStream(docPath);
			xdoc.write(fos);
			fos.close();
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	/**
	 * 獲取資料庫每個表的資訊
	 * 
	 * @param data
	 * @return
	 */
	public Map<String, String[][]> dataInfo(String data) {
		List<Map<String, Object>> list = jdbcTemplate.queryForList(
				"select table_name,table_comment from information_schema.tables where table_schema = ?", data);
		Map<String, String[][]> datas = new HashMap<String, String[][]>();
		for (Map<String, Object> map : list) {
			String table_name = map.get("table_name") + "";
			String table_comment = map.get("table_comment") + "";
			datas.put("表:" + table_name + ":" + table_comment, tableInfo(data + "." + table_name));
		}
		return datas;
	}

	/**
	 * 獲取每個表的欄位資訊
	 * 
	 * @param table
	 * @return
	 */
	public String[][] tableInfo(String table) {
		List<Map<String, Object>> list = jdbcTemplate.queryForList("SHOW FULL FIELDS FROM " + table);
		String[][] tables = new String[list.size()][3];
		for (int i = 0; i < list.size(); i++) {
			Map<String, Object> map = list.get(i);
			String[] info = new String[3];
			info[0] = map.get("Field") + "";
			info[1] = map.get("Type") + "";
			info[2] = map.get("Comment") + "";
			tables[i] = info;
		}
		return tables;
	}

	/**
	 * 生成表格
	 * 
	 * @param xTable
	 * @param xdoc
	 */
	public static void createTable(XWPFTable xTable, XWPFDocument xdoc, String[][] clumns) {
		String bgColor = "111111";
		CTTbl ttbl = xTable.getCTTbl();
		CTTblPr tblPr = ttbl.getTblPr() == null ? ttbl.addNewTblPr() : ttbl.getTblPr();
		CTTblWidth tblWidth = tblPr.isSetTblW() ? tblPr.getTblW() : tblPr.addNewTblW();
		tblWidth.setW(new BigInteger("8600"));
		tblWidth.setType(STTblWidth.DXA);
		setCellText(xdoc, getCellHight(xTable, 0, 0), "欄位名", bgColor, 1000);
		setCellText(xdoc, getCellHight(xTable, 0, 1), "型別", bgColor, 3800);
		setCellText(xdoc, getCellHight(xTable, 0, 2), "說明", bgColor, 3800);
		int length = clumns.length;
		for (int i = 0; i < length; i++) {
			setCellText(xdoc, getCellHight(xTable, i + 1, 0), clumns[i][0], bgColor, 1000);
			setCellText(xdoc, getCellHight(xTable, i + 1, 1), clumns[i][1], bgColor, 3800);
			setCellText(xdoc, getCellHight(xTable, i + 1, 2), clumns[i][2], bgColor, 3800);
		}
	}

	// 設定表格高度
	private static XWPFTableCell getCellHight(XWPFTable xTable, int rowNomber, int cellNumber) {
		XWPFTableRow row = null;
		row = xTable.getRow(rowNomber);
		row.setHeight(100);
		XWPFTableCell cell = null;
		cell = row.getCell(cellNumber);
		return cell;
	}

	/**
	 * 單元格設定文字
	 * 
	 * @param xDocument
	 * @param cell
	 * @param text
	 * @param bgcolor
	 * @param width
	 */
	private static void setCellText(XWPFDocument xDocument, XWPFTableCell cell, String text, String bgcolor,
			int width) {
		CTTc cttc = cell.getCTTc();
		CTTcPr cellPr = cttc.addNewTcPr();
		cellPr.addNewTcW().setW(BigInteger.valueOf(width));
		XWPFParagraph pIO = cell.addParagraph();
		cell.removeParagraph(0);
		XWPFRun rIO = pIO.createRun();
		rIO.setFontFamily("微軟雅黑");
		rIO.setColor("000000");
		rIO.setFontSize(12);
		rIO.setText(text);
	}

	// 設定表格間的空行
	public static void setEmptyRow(XWPFDocument xdoc, XWPFRun r1) {
		XWPFParagraph p1 = xdoc.createParagraph();
		p1.setAlignment(ParagraphAlignment.CENTER);
		p1.setVerticalAlignment(TextAlignment.CENTER);
		r1 = p1.createRun();
	}
}
package com.zcj.config;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;

@Configuration
@ComponentScan(basePackages= {"com.zcj"})
@PropertySource("classpath:config/db.properties")
public class SpringConfig {
	@Value("${db_url}")
	private String url;
	@Value("${db_username}")
	private String username;
	@Value("${db_password}")
	private String password;
	@Value("${db_driver}")
	private String driver;
	@Bean
	public DriverManagerDataSource driverManagerDataSource() {
		DriverManagerDataSource dataSource = new DriverManagerDataSource(url, username, password);
		dataSource.setDriverClassName(driver);
		return dataSource;
	}
	@Bean
	public JdbcTemplate jdbcTemplate() {
		return new JdbcTemplate(driverManagerDataSource());
	}
}

db_url=jdbc:mysql://192.168.1.100:3306/disconf?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
db_username=root
db_password=chensheng
db_driver=com.mysql.jdbc.Driver
data_name=disconf
doc_dir_path=D:/\u6570\u636E\u5E93


相關推薦

生成資料庫設計(目前支援mysql)

生成類package com.zcj.unittest; import java.io.File; import java.io.FileOutputStream; import java.math.BigInteger; import java.util.Date; im

生成資料庫設計

目錄結構  pom.xml依賴 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaL

資料庫:用PowerDesigner工具生成資料庫設計

點選選單選擇Report Wizaed 選擇語言為簡體中文 選擇生成為rtf檔案的專業模式 生成檔案 成功生成文件 若列欄位不合適可以自定義,方法如下 右鍵點選layout,將需要顯示的欄位打鉤即可,Code表示列名稱,

生成 資料庫設計

最近要寫一個數據庫設計文件        資料設計文件中資料庫結構設計這個模組是需要把資料庫的所有欄位,標識,註釋等的設計寫出來,如果手寫會瘋的,現在自己來寫個生成工具生成,只要連線資料庫就ok。一、在用idea建立maven專案,在pom裡面新增下面的jar(dbcp可以不

Mysql2docx生成資料庫設計

[需要python3.0以上] pip install Mysql2docx >>> from Mysql2docx import Mysql2docx >>>

資料庫設計編寫模板

在編寫資料庫設計說明文件時,需要對每一張資料表做設計說明,其中最主要、也是最繁瑣的部分就是表字段描述部分,那麼採取什麼樣的模板格式,即能完整表達表字段設計用意,又能快速採集資料庫設計資訊呢?建議如下: 列名 資料型別 允許空 預設值

簡單的資料庫設計

做的第一個專案的資料庫設計 1. 引言 1.1 編寫目的 本文件旨在詳細描述工作任務管理與評價系統中的資料庫結構與設計。本文的讀者可為工作任務管理與評價系統的開發者,也可以是工作任務管理與評價系統的維護人員。 1.2 背景 在第四次科技革命的浪潮

mysql轉換成word作為資料庫設計

每次我們開發到一個專案的結束之後,需要讓我們寫一份資料庫設計的文件,但是如果我們使用  Navicat 進行資料庫表名稱、註釋、欄位型別的一張張表匯出的話顯然太慢了,而且重複的工作會讓人感到抓狂, 於是可以使用這樣的一個工具來方面生成資料庫表設計:這個工具就是 DBEx

laravel生成資料庫字典和api

一、字典文件: 1、安裝包檔案 composer require jormin/laravel-ddoc 2、註冊 ServiceProvider: Jormin\DDoc\DDocServiceProvider::class, 3、建立配置檔案: php artisan

資料庫設計怎樣才算寫的詳盡呢?

因為不夠詳細的設計文件很可能讓設計人員的電話打爆,讓開發人員瞎蒙某些欄位的含義。 下面我們以物理設計文件為例,討論如何書寫詳盡的資料庫文件。 1、基本的設計需要。如表的定義,表中各個欄位的定義等等。這也是我們最常見的資料庫物理設計文件。(咱剛開始做資料庫物理設計就提供這樣的

springboot+freemarker實現生成資料庫設計Word

      以前在專案完成後都會按照要求寫資料庫設計文件,表少的時候還無所謂,當有上百張表的時候就不好寫了。當然也有一些自動化軟體可以幫我們實現這個功能,但是自定義的程度比較低。所以今天自己來實現這個功能,可以按照自己的喜好定義樣式和模板,是不是很酷。 首先新建一個Word

mysql資料庫自動生成資料庫開發設計

1、輸出表結果,表結構可自己通過程式碼調整,簡單但是有時候很實用,可以節省大量的時間,主要思路: a 在java程式碼中,通過資料庫查詢語句獲取所有表名和表名備註資訊。 b 通過表名獲取某張表的所有欄位說明。 c 整理查詢出來的結果,寫入到word文件中。

Django 2.1.3 -模型層 支援資料庫

資料庫 1. 一般注意事項 1.1 持久連線 1.2 連線管理 1.3 警告 1.4 編碼 2. Mysql注意事項 2.1 版本支援 2.2 儲存引擎 2.3 MySQL DB AP

資料庫生成chm閱讀

之前開發的時候,公司給的資料庫文件都是word格式的看起來挺麻煩的,後來在網上查了一下,這裡總結一下: 一、 首先需要將資料生成pdm(物理模型)檔案 1.首先需要繫結資料來源,在控制面板-管理工具 下一步->完成。 選相應的ODBC資料來源

java生成zip壓縮,解壓縮

fileinput 重復 temp parent mp4 define blog exc java 1.生成zip public static void main(String[] args) { try { // testZip("

java直接生成zip壓縮精簡代碼(跳過txt

txt文件 pan cnblogs ace ipo cname exception pre ram /** * @param args */ public static void main(String[] args) throws Excep

將VS生成的msi和exe及環境集合為一個exe

exit winrar img 文件 isset rip 技術分享 nbsp 如何使用 WinRAR這個軟件之前就說很強大,今天才知道原來解壓軟件不僅僅能解壓,還能生成一個直解壓的文件exe,但是需要我們寫一個簡單的vbs或者bat文件調用cmd來運行我們的msi文件。 v

ROS知識(16)----如何編譯時自動鏈接同一個工作空間的其他包的頭(包含message,srv,action自動生成的頭

logs package fin 空間 依賴庫 osc div build 知識 catkin_make編譯時,往往需要自動鏈接同一個工作空間的其他包的頭文件。否則會出現類似如下的錯誤: /home/xx/xx_ws/srcA_package/src/db.hpp:13:

selenium之批量執行測試用例生成HTML結果

col strftime 指定 class ast pattern fault import 測試報告 使用HTMLTestRunner運行測試套件,自動生成html測試報告: 1 import unittest, HTMLTestRunner, sendmail_ht

對大進行打印過濾條件到列表元素

weight 文件 bold lose lin log for color 進行 f=open("1.log",‘r‘)s=f.readlines()for i in range(911): if "qSrcAddr=180.163.194.15" in s[i]: