oracle数据库自动生成数据库表结构文档(亲测有效)

database

  1  2

3import java.awt.Color;

4import java.io.FileOutputStream;

5import java.sql.Connection;

6import java.sql.DriverManager;

7import java.sql.ResultSet;

8import java.sql.SQLException;

9import java.sql.Statement;

10import java.util.ArrayList;

11import java.util.HashMap;

12import java.util.Iterator;

13import java.util.List;

14import java.util.Map;

15

16import com.lowagie.text.*;

17import com.lowagie.text.rtf.RtfWriter2;

18/**

19 * 数据库文档生成器 Oracle版

20 * itext-2.1.7.jar

21 * itext-rtf-2.1.7.jar

22 * @author cuiyj

23 *

24*/

25publicclass GenerateTableDoc {

26//键类型字典

27privatestatic Map<String,String> keyType = new HashMap<String,String>();

28//需要导出的目标表

29privatestatic List<String> targetTable = new ArrayList<String>();

30static{

31 targetTable.add("COMMON_ADDRESS");//表名

32 targetTable.add("L_USER");

33 }

34//初始化jdbc

35static{

36try {

37 keyType.put("ID", "主键");

38// keyType.put("C", "Check");

39 Class.forName("oracle.jdbc.OracleDriver");

40 } catch (ClassNotFoundException e) {

41 e.printStackTrace();

42 }

43 }

44//private static String url = "";//链接url

45privatestatic String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";//链接url

46privatestatic String username = "user"; //用户名.需要设置默认表空间哈

47privatestatic String password = "user"; //密码

48privatestatic String schema = "USER"; //目标数据库名

49//查询所有表的sql语句

50privatestatic String sql_get_all_tables = "select a.TABLE_NAME,b.COMMENTS from user_tables a,user_tab_comments b WHERE a.TABLE_NAME=b.TABLE_NAME order by TABLE_NAME"; //查询所有字段的sql语句

51privatestatic String sql_get_all_columns = "select T1.column_name,T1.data_type,T1.data_length,t2.comments,T1.NULLABLE,(select max(constraint_type) from user_constraints x left join user_cons_columns y on x.constraint_name=y.constraint_name where x.table_name=t1.TABLE_NAME and y.COLUMN_NAME=T1.column_name) from user_tab_cols t1, user_col_comments t2, user_tab_comments t3 where t1.TABLE_NAME=t2.table_name(+) and t1.COLUMN_NAME=t2.column_name(+) and t1.TABLE_NAME=t3.table_name(+) and t1.TABLE_NAME="{table_name}" order by T1.COLUMN_ID ";

52publicstaticvoid main(String[] args) throws Exception {

53//初始化word文档

54 Document document = new Document(PageSize.A4);

55 RtfWriter2.getInstance(document,new FileOutputStream("E:/word.doc"));

56 document.open();

57//查询开始

58 Connection conn = getConnection();

59//获取所有表

60 List tables = getDataBySQL(sql_get_all_tables,conn);

61int i=1;

62for (Iterator iterator = tables.iterator(); iterator.hasNext();) {

63 String [] arr = (String []) iterator.next();

64//循环获取字段信息

65 String tableName = arr[0];

66if(targetTable.contains(tableName)){

67 System.out.print(i+".正在处理数据表-----------"+arr[0]);

68 addTableMetaData(document,arr,i);

69 List columns = getDataBySQL(sql_get_all_columns.replace("{table_name}", arr[0]),conn);

70 addTableDetail(document,columns);

71 addBlank(document);

72 System.out.println("...done");

73 i++;

74 }

75 }

76 document.close();

77 conn.close();

78 }

79/**

80 * 添加一个空行

81 * @param document

82 * @throws Exception

83*/

84publicstaticvoid addBlank(Document document)throws Exception{

85 Paragraph ph = new Paragraph("");

86 ph.setAlignment(Paragraph.ALIGN_LEFT);

87 document.add(ph);

88 }

89/**

90 * 添加包含字段详细信息的表格

91 * @param document

92 * @param arr1

93 * @param columns

94 * @throws Exception

95*/

96publicstaticvoid addTableDetail(Document document,List columns)throws Exception{

97 Table table = new Table(6);

98 table.setWidth(100f);

99 table.setBorderWidth(1);

100 table.setBorderColor(Color.BLACK);

101 table.setPadding(0);

102 table.setSpacing(0);

103 Cell cell1 = new Cell("序号");// 单元格

104 cell1.setHeader(true);

105

106 Cell cell2 = new Cell("列名");// 单元格

107 cell2.setHeader(true);

108

109 Cell cell3 = new Cell("类型");// 单元格

110 cell3.setHeader(true);

111

112 Cell cell4 = new Cell("长度");// 单元格

113 cell4.setHeader(true);

114

115 Cell cell5 = new Cell("键");// 单元格

116 cell5.setHeader(true);

117

118 Cell cell6 = new Cell("说明");// 单元格

119 cell6.setHeader(true);

120//设置表头格式

121 table.setWidths(newfloat[]{8f,30f,15f,8f,10f,29f});

122 cell1.setHorizontalAlignment(Cell.ALIGN_CENTER);

123 cell1.setBackgroundColor(Color.gray);

124 cell2.setHorizontalAlignment(Cell.ALIGN_CENTER);

125 cell2.setBackgroundColor(Color.gray);

126 cell3.setHorizontalAlignment(Cell.ALIGN_CENTER);

127 cell3.setBackgroundColor(Color.gray);

128 cell4.setHorizontalAlignment(Cell.ALIGN_CENTER);

129 cell4.setBackgroundColor(Color.gray);

130 cell5.setHorizontalAlignment(Cell.ALIGN_CENTER);

131 cell5.setBackgroundColor(Color.gray);

132 cell6.setHorizontalAlignment(Cell.ALIGN_CENTER);

133 cell6.setBackgroundColor(Color.gray);

134 table.addCell(cell1);

135 table.addCell(cell2);

136 table.addCell(cell3);

137 table.addCell(cell4);

138 table.addCell(cell5);

139 table.addCell(cell6);

140 table.endHeaders();// 表头结束

141int x = 1;

142for (Iterator iterator = columns.iterator(); iterator.hasNext();) {

143 String [] arr2 = (String []) iterator.next();

144 Cell c1 = new Cell(x+"");

145 Cell c2 = new Cell(arr2[0]);

146 Cell c3 = new Cell(arr2[1]);

147 Cell c4 = new Cell(arr2[2]);

148

149 String key = keyType.get(arr2[5]);

150if(key==null)key = "";

151 Cell c5 = new Cell(key);

152 Cell c6 = new Cell(arr2[3]);

153 c1.setHorizontalAlignment(Cell.ALIGN_CENTER);

154 c2.setHorizontalAlignment(Cell.ALIGN_CENTER);

155 c3.setHorizontalAlignment(Cell.ALIGN_CENTER);

156 c4.setHorizontalAlignment(Cell.ALIGN_CENTER);

157 c5.setHorizontalAlignment(Cell.ALIGN_CENTER);

158 c6.setHorizontalAlignment(Cell.ALIGN_CENTER);

159 table.addCell(c1);

160 table.addCell(c2);

161 table.addCell(c3);

162 table.addCell(c4);

163 table.addCell(c5);

164 table.addCell(c6);

165 x++;

166 }

167 document.add(table);

168 }

169/**

170 * 增加表概要信息

171 * @param dcument

172 * @param arr

173 * @param i

174 * @throws Exception

175*/

176publicstaticvoid addTableMetaData(Document dcument,String [] arr,int i) throws Exception{

177 Paragraph ph = new Paragraph(i+". 表名: "+arr[0]+" 说明: "+(arr[1]==null?"":arr[1]));

178 ph.setAlignment(Paragraph.ALIGN_LEFT);

179 dcument.add(ph);

180 }

181/**

182 * 把SQL语句查询出列表

183 * @param sql

184 * @param conn

185 * @return

186*/

187publicstatic List getDataBySQL(String sql,Connection conn){

188 Statement stmt = null;

189 ResultSet rs = null;

190 List list = new ArrayList();

191try {

192 stmt = conn.createStatement();

193 rs = stmt.executeQuery(sql);

194while(rs.next()){

195 String [] arr = new String[rs.getMetaData().getColumnCount()];

196for(int i=0;i<arr.length;i++){

197 arr[i] = rs.getString(i+1);

198 }

199 list.add(arr);

200 }

201 } catch (SQLException e) {

202 e.printStackTrace();

203 }finally{

204try {

205if(rs!=null)rs.close();

206if(stmt!=null)stmt.close();

207 } catch (SQLException e) {

208 e.printStackTrace();

209 }

210 }

211return list;

212 }

213/**

214 * 获取数据库连接

215 * @return

216*/

217publicstatic Connection getConnection(){

218try {

219return DriverManager.getConnection(url, username, password);

220 } catch (SQLException e) {

221 e.printStackTrace();

222 }

223returnnull;

224 }

225 }

 1------ 这是相关依赖      

2<dependency>

3<groupId>com.lowagie</groupId>

4<artifactId>itext</artifactId>

5<version>2.1.7</version>

6</dependency>

7<dependency>

8<groupId>com.lowagie</groupId>

9<artifactId>itext-rtf</artifactId>

10<version>2.1.7</version>

11</dependency>

 

 

 

以上是 oracle数据库自动生成数据库表结构文档(亲测有效) 的全部内容, 来源链接: utcz.com/z/531362.html

回到顶部