生活随笔
收集整理的這篇文章主要介紹了
java导出数据库的结构 表结构 字段信息 主键
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?工作之余,用java寫了一個導出數據庫結構的小工具,附上核心代碼
Table.java
?
package?org.dev.livvy.db;??import?java.util.List;?????????public?class?Table?{????????????private?String?name;????????????private?String?space;????????????List<Column>?columns;??????public?String?getName()?{?????????return?name;?????}??????public?void?setName(String?name)?{?????????this.name?=?name;?????}??????public?String?getSpace()?{?????????return?space;?????}??????public?void?setSpace(String?space)?{?????????this.space?=?space;?????}???????public?List<Column>?getColumns()?{?????????return?columns;?????}??????public?void?setColumns(List<Column>?columns)?{?????????this.columns?=?columns;?????}??????@Override?????public?String?toString()?{?????????return?"Table{"?+?????????????????"name='"?+?name?+?'\''?+?????????????????",?space='"?+?space?+?'\''?+?????????????????",?columns="?+?columns?+?????????????????'}';?????}?}? Column.java
?
package?org.dev.livvy.db;?????????public?class?Column?{????????????private?String?tableName;????????????private?String?name;????????????private??int?isPk;????????????private?String?value;????????????private?int?isNotNull;????????????private?String?type;????????????private?int?length;????????????private?int?codeType;??????public?String?getTableName()?{?????????return?tableName;?????}??????public?void?setTableName(String?tableName)?{?????????this.tableName?=?tableName;?????}??????public?String?getName()?{?????????return?name;?????}??????public?void?setName(String?name)?{?????????this.name?=?name;?????}??????public?int?getPk()?{?????????return?isPk;?????}??????public?void?setPk(int?pk)?{?????????isPk?=?pk;?????}??????public?String?getValue()?{?????????return?value;?????}??????public?void?setValue(String?value)?{?????????this.value?=?value;?????}??????public?int?getNotNull()?{?????????return?isNotNull;?????}??????public?void?setNotNull(int?notNull)?{?????????isNotNull?=?notNull;?????}??????public?String?getType()?{?????????return?type;?????}??????public?void?setType(String?type)?{?????????this.type?=?type;?????}??????public?int?getLength()?{?????????return?length;?????}??????public?void?setLength(int?length)?{?????????this.length?=?length;?????}??????public?int?getCodeType()?{?????????return?codeType;?????}??????public?void?setCodeType(int?codeType)?{?????????this.codeType?=?codeType;?????}??????@Override?????public?String?toString()?{?????????return?"Column{"?+?????????????????"tableName='"?+?tableName?+?'\''?+?????????????????",?name='"?+?name?+?'\''?+?????????????????",?isPk="?+?isPk?+?????????????????",?value='"?+?value?+?'\''?+?????????????????",?isNotNull="?+?isNotNull?+?????????????????",?type='"?+?type?+?'\''?+?????????????????",?length="?+?length?+?????????????????",?codeType="?+?codeType?+?????????????????'}';?????}?}? DBAnalysis.java數據庫分析類
?
package?org.dev.livvy.db;??import?java.sql.*;?import?java.util.ArrayList;?import?java.util.Iterator;?import?java.util.List;?????????public?class?DBAnalysis?{??????private?Connection?connection;??????private?DBAnalysis(String?connStr,?String?db,?String?username,?String?password)?throws?ClassNotFoundException,?SQLException?{?????????Class.forName("com.mysql.jdbc.Driver");?????????connection?=?DriverManager.getConnection(connStr?+?db,?username,?password);?????}??????private?static?DBAnalysis?instance?=?null;??????private?static?DBAnalysis?getInstance(String?connStr,?String?db,?String?username,?String?password)?throws?SQLException,?ClassNotFoundException?{?????????if?(instance?==?null)?{?????????????instance?=?new?DBAnalysis(connStr,?db,?username,?password);?????????}?????????return?instance;?????}??????private?static?Connection?getConnection(String?connStr,?String?db,?String?username,?String?password)?throws?SQLException,?ClassNotFoundException?{?????????return?getInstance(connStr,?db,?username,?password).connection;?????}?????????????????private?static?List?getPks(Connection?conn,?String?tableName)?throws?SQLException?{?????????List?pks?=?new?ArrayList();?????????ResultSet?rsPks?=?conn.getMetaData().getPrimaryKeys(null,?null,?tableName);??????????while?(rsPks.next())?{?????????????pks.add(rsPks.getString("COLUMN_NAME"));?????????}?????????rsPks.close();??????????return?pks;?????}?????????????????private?static?List<Column>?getColumns(Connection?conn,String?tableName)?throws?SQLException?{?????????List<Column>?cols?=?new?ArrayList<Column>();??????????????????List?pks?=?getPks(conn,tableName);?????????Statement?stmt?=?conn.createStatement();?????????ResultSet?rs?=?stmt.executeQuery("select?*?from?"?+?tableName);????????????????????????????????????????????ResultSetMetaData?rsCols?=?rs.getMetaData();?????????int?columnCount?=?rsCols.getColumnCount();?????????for?(int?i?=?1;?i?<=?columnCount;?i++)?{?????????????Column?col?=?new?Column();?????????????col.setTableName(rsCols.getTableName(i));?????????????col.setName(rsCols.getColumnName(i));?????????????col.setType(rsCols.getColumnTypeName(i));?????????????col.setPk(pks.contains(rsCols.getColumnName(i))???1?:?0);?????????????col.setLength(rsCols.getColumnDisplaySize(i));?????????????col.setNotNull(rsCols.isNullable(i)?==?0???1?:?0);?????????????cols.add(col);?????????}?????????rs.close();?????????stmt.close();?????????return?cols;?????}????????????????????public?static?List<Table>?collectAllTables(String?connStr,?String?db,?String?username,?String?password)?throws?SQLException,?ClassNotFoundException?{?????????Connection?conn?=?getConnection(connStr,?db,?username,?password);?????????return?collectAllTables(conn,db);?????}?????????????????public?static?List<Table>?collectAllTables(Connection?conn,String?db)?throws?SQLException?{?????????DatabaseMetaData?dmd?=?conn.getMetaData();???????????????????ResultSet?rsTables?=?dmd.getTables(null,?null,?null,?new?String[]{"TABLE"});?????????List<Table>?tables?=?new?ArrayList<Table>();??????????????????while?(rsTables.next())?{?????????????Table?tb?=?new?Table();?????????????tb.setSpace(db);??????????????????????????String?tbName?=?rsTables.getString("TABLE_NAME");?????????????tb.setName(tbName);???????????????????????????List<Column>?cols?=?getColumns(conn,tbName);?????????????tb.setColumns(cols);?????????????tables.add(tb);?????????}?????????rsTables.close();??????????return?tables;????????????????}?}? ?
轉載于:https://blog.51cto.com/livvyguo/1120348
總結
以上是生活随笔為你收集整理的java导出数据库的结构 表结构 字段信息 主键的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。