当前位置 : 主页 > 编程语言 > c++ >

导出项目表结构到word文档

来源:互联网 收集:自由互联 发布时间:2021-06-30
数据库数据读取基于jfinal,导出项目表结构到word文档 package format;import java.io.FileOutputStream;import java.math.BigInteger;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map
数据库数据读取基于jfinal,导出项目表结构到word文档
package format;
import java.io.FileOutputStream;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.poi.xwpf.usermodel.ParagraphAlignment;
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.XWPFTableCell.XWPFVertAlign;
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.STJc;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STTblWidth;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STVerticalJc;

import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
import com.jfinal.plugin.activerecord.CaseInsensitiveContainerFactory;
import com.jfinal.plugin.activerecord.Db;
import com.jfinal.plugin.activerecord.Record;
import com.jfinal.plugin.activerecord.dialect.OracleDialect;
import com.jfinal.plugin.druid.DruidPlugin;

public class WordPro {
	private static final String DRIVER = "oracle.jdbc.driver.OracleDriver";
	private static final String JDBCURL = "jdbc:oracle:thin:@192.168.xx.xx:1521:ORCL";
	private static final String USERNAME = "xxxx";
	private static final String PASSWORD = "xxxx";
	
	static {
		//PropKit.use("config");
				DruidPlugin dp = new DruidPlugin(JDBCURL, USERNAME, PASSWORD, DRIVER);
				ActiveRecordPlugin arp = new ActiveRecordPlugin(dp);
				arp.setShowSql(false);//显示sql
				
				arp.setDialect(new OracleDialect());
				// 配置属性名(字段名)大小写不敏感容器工厂
				arp.setContainerFactory(new CaseInsensitiveContainerFactory());
				
				
				dp.setMaxActive(10);
				dp.start();
				arp.start();
	}
	
	
	public static void main(String[] args) throws Exception {
		toOracleColumn("视频家数据结构文档","D:/saveFile/sys_"+ System.currentTimeMillis() + ".docx",findParams("JS_VIDEO"));
	}
	
	
	
	/**
	 * 查询出表结构封装成map
	 * @param likeName 查询指定名称的表
	 * @return
	 * @author 邢超
	 * 创建时间:2017年8月23日
	 *
	 */
	public static Map
 
  > findParams(String likeName){	
		String sql = "select * from (select  d.table_name tbname,a.column_id columnid,coalesce(t.comments, ' ') tbdesc,"
				+ "a.column_name columnname, a.data_type columntype,a.data_length width,a.data_scale precision,"
				+ "decode(a.nullable,'y','0','1') notnull,a.data_default,coalesce(m.comments, ' ') comments,"
				+ "decode(k.uniqueness,'unique','1','0') uniques,coalesce(k.index_name, ' ') indexname,decode(k.key,'y','1','0') masterkey"
				+ " from user_tab_columns a inner join  user_tables d on a.table_name=d.table_name "
				+ "left join user_tab_comments t on t.table_name=d.table_name "
				+ "left join user_col_comments m on m.column_name=a.column_name and m.table_name=d.table_name "
				+ "left join(select e.index_name,u.table_name,u.column_name,e.uniqueness,decode(p.constraint_name,null,'n','y') key "
				+ "from user_indexes e inner join user_ind_columns u on e.index_name=u.index_name "
				+ "left join ( select constraint_name from user_constraints where constraint_type='p' ) p on e.index_name=p.constraint_name"
				+ ") k on k.table_name=a.table_name and k.column_name=a.column_name"
				+ ") where tbname like '%"+likeName+"%' order by tbname,columnid";
		
		List
  
    rt = Db.find(sql); Map
   
    > mapp = new HashMap
    
     >(); for(Record r:rt){ String tname = r.get("tbname"); boolean flag = mapp.containsKey(tname); if(flag){ mapp.get(tname).add(r); }else{ ArrayList
     
       list = new ArrayList
      
       (); list.add(r); mapp.put(tname, list); } } return mapp; } /** * 导出表结构到文档 * @param title 文档标题 * @param path 文档路径 * @param mapp 查询出来的表结构 key 表名,value字段的相关属性信息 * @return * @throws Exception * @author 邢超 * 创建时间:2017年8月23日 * */ public static boolean toOracleColumn(String title,String path,Map
       
        > mapp) throws Exception{ FileOutputStream fos = new FileOutputStream(path); XWPFDocument xdoc = new XWPFDocument(); XWPFParagraph xp = xdoc.createParagraph(); XWPFRun r1 = xp.createRun(); r1.setText(title); r1.setFontFamily("宋体"); r1.setFontSize(25); r1.setTextPosition(10); r1.setBold(true); xp.setAlignment(ParagraphAlignment.CENTER); for(String tname:mapp.keySet()){ List
        
          records = mapp.get(tname); xp = xdoc.createParagraph(); r1 = xp.createRun(); r1.setText(tname+":"+records.get(0).getStr("tbdesc")); r1.setFontFamily("宋体"); r1.setFontSize(12); r1.setTextPosition(10); r1.setBold(true); xp.setAlignment(ParagraphAlignment.LEFT);//设置文字位置居左 XWPFTable xTable = xdoc.createTable(records.size()+1,8); 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); int i = 0; xTable.getRow(i).setHeight(380); setCellText(xdoc, xTable.getRow(i).getCell(0), "字段名", "CCCCCC", getCellWidth(0)); setCellText(xdoc, xTable.getRow(i).getCell(1), "类型", "CCCCCC", getCellWidth(1)); setCellText(xdoc, xTable.getRow(i).getCell(2), "备注", "CCCCCC", getCellWidth(2)); setCellText(xdoc, xTable.getRow(i).getCell(3), "默认值", "CCCCCC", getCellWidth(3)); setCellText(xdoc, xTable.getRow(i).getCell(4), "索引", "CCCCCC", getCellWidth(4)); setCellText(xdoc, xTable.getRow(i).getCell(5), "是否为空", "CCCCCC", getCellWidth(5)); setCellText(xdoc, xTable.getRow(i).getCell(6), "唯一", "CCCCCC", getCellWidth(6)); setCellText(xdoc, xTable.getRow(i).getCell(7), "主键", "CCCCCC", getCellWidth(7)); for(Record re:records){ ++i; setCellText(xdoc, xTable.getRow(i).getCell(0), re.getStr("columnname"), null,getCellWidth(i)); setCellText(xdoc, xTable.getRow(i).getCell(1), re.getStr("columntype")+"("+re.getBigDecimal("width")+")", null,getCellWidth(i)); setCellText(xdoc, xTable.getRow(i).getCell(2), re.getStr("comments"), null,getCellWidth(i)); setCellText(xdoc, xTable.getRow(i).getCell(3), re.getStr("data_default"), null,getCellWidth(i)); setCellText(xdoc, xTable.getRow(i).getCell(4), re.getStr("indexname"), null,getCellWidth(i)); setCellText(xdoc, xTable.getRow(i).getCell(5), re.getStr("notnull"), null,getCellWidth(i)); setCellText(xdoc, xTable.getRow(i).getCell(6), re.getStr("uniques"), null,getCellWidth(i)); setCellText(xdoc, xTable.getRow(i).getCell(7), re.getStr("masterkey"), null,getCellWidth(i)); } } xdoc.write(fos); fos.flush(); fos.close(); return false; } 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)); cell.setColor(bgcolor); cell.setVerticalAlignment(XWPFVertAlign.CENTER); CTTcPr ctPr = cttc.addNewTcPr(); ctPr.addNewVAlign().setVal(STVerticalJc.CENTER); cttc.getPList().get(0).addNewPPr().addNewJc().setVal(STJc.CENTER); cell.setText(text); } private static int getCellWidth(int index) { int cwidth = 1000; if (index == 0) { cwidth = 1600; } else if (index == 1) { cwidth = 3000; } else if (index == 2) { cwidth = 1200; } else if (index == 3) { cwidth = 900; } else if (index == 4) { cwidth = 600; } else if (index == 5) { cwidth = 600; } else if (index == 6) { cwidth = 700; } return cwidth; } }
        
       
      
     
    
   
  
 
网友评论