【java 獲取數據庫信息】獲取MySQL或其餘數據庫的詳細信息

1.首先是 經過數據庫獲取數據表的詳細列信息java

  1 package com.sxd.mysqlInfo.test;
  2 
  3 import java.sql.Connection;
  4 import java.sql.DatabaseMetaData;
  5 import java.sql.DriverManager;
  6 import java.sql.PreparedStatement;
  7 import java.sql.ResultSet;
  8 import java.sql.ResultSetMetaData;
  9 import java.sql.SQLException;
 10 
 11 import org.junit.Test;
 12 
 13 
 14 public class MySqlInfo2 {
 15 
 16     private final static String DRIVER = "com.mysql.jdbc.Driver";
 17     private final static String URL = "jdbc:mysql://localhost:3306/biologyinfo";
 18     private final static String USERNAME = "root";
 19     private final static String PASSWORD = "root";
 20     
 21     public static Connection getConnection() throws ClassNotFoundException, SQLException{
 22         Connection con = null;
 23         Class.forName(DRIVER);
 24         con = DriverManager.getConnection(URL, USERNAME, PASSWORD);
 25         return con;
 26     }
 27     
 28     @Test
 29     public void just4AllDBInfo() throws ClassNotFoundException, SQLException{
 30         Connection con = getConnection();
 31         DatabaseMetaData metaDate = con.getMetaData();
 32         //1.獲得數據庫下全部數據表
 33         ResultSet rs = metaDate.getTables("biologyinfo", null, null, null);
 34         //2.根據表名  拼接成SQL語句  查詢到某個表的全部列
 35         PreparedStatement prep = null;
 36         while(rs.next()){
 37             String sql = "SELECT  *  FROM "+rs.getString(3)+" WHERE 1=2;";
 38             prep = con.prepareStatement(sql);  
 39             ResultSet set = prep.executeQuery(sql);
 40             ResultSetMetaData data = set.getMetaData();
 41             //迭代取到全部列信息
 42             for (int i = 1; i <= data.getColumnCount(); i++) {
 43                 // 得到全部列的數目及實際列數
 44                 int columnCount = data.getColumnCount();
 45                 // 得到指定列的列名
 46                 String columnName = data.getColumnName(i);
 47                 // 得到指定列的列值
 48                 int columnType = data.getColumnType(i);
 49                 // 得到指定列的數據類型名
 50                 String columnTypeName = data.getColumnTypeName(i);
 51                 // 所在的Catalog名字
 52                 String catalogName = data.getCatalogName(i);
 53                 // 對應數據類型的類
 54                 String columnClassName = data.getColumnClassName(i);
 55                 // 在數據庫中類型的最大字符個數
 56                 int columnDisplaySize = data.getColumnDisplaySize(i);
 57                 // 默認的列的標題
 58                 String columnLabel = data.getColumnLabel(i);
 59                 // 得到列的模式
 60                 String schemaName = data.getSchemaName(i);
 61                 // 某列類型的精確度(類型的長度)
 62                 int precision = data.getPrecision(i);
 63                 // 小數點後的位數
 64                 int scale = data.getScale(i);
 65                 // 獲取某列對應的表名
 66                 String tableName = data.getTableName(i);
 67                 // 是否自動遞增
 68                 boolean isAutoInctement = data.isAutoIncrement(i);
 69                 // 在數據庫中是否爲貨幣型
 70                 boolean isCurrency = data.isCurrency(i);
 71                 // 是否爲空
 72                 int isNullable = data.isNullable(i);
 73                 // 是否爲只讀
 74                 boolean isReadOnly = data.isReadOnly(i);
 75                 // 可否出如今where中
 76                 boolean isSearchable = data.isSearchable(i);
 77                 
 78                 System.out.println("數據表:"+rs.getString(3));
 79                 System.out.println("數據表"+rs.getString(3)+"列總數:"+columnCount);
 80                 System.out.println("得到列" + i + "的字段名稱:" + columnName);
 81                 System.out.println("得到列" + i + "的類型,返回SqlType中的編號:"+ columnType);
 82                 System.out.println("得到列" + i + "的數據類型名:" + columnTypeName);
 83                 System.out.println("得到列" + i + "所在的Catalog名字:"+ catalogName);
 84                 System.out.println("得到列" + i + "對應數據類型的類:"+ columnClassName);
 85                 System.out.println("得到列" + i + "在數據庫中類型的最大字符個數:"+ columnDisplaySize);
 86                 System.out.println("得到列" + i + "的默認的列的標題:" + columnLabel);
 87                 System.out.println("得到列" + i + "的模式:" + schemaName);
 88                 System.out.println("得到列" + i + "類型的精確度(類型的長度):" + precision);
 89                 System.out.println("得到列" + i + "小數點後的位數:" + scale);
 90                 System.out.println("得到列" + i + "對應的表名:" + tableName);
 91                 System.out.println("得到列" + i + "是否自動遞增:" + isAutoInctement);
 92                 System.out.println("得到列" + i + "在數據庫中是否爲貨幣型:" + isCurrency);
 93                 System.out.println("得到列" + i + "是否爲空:" + isNullable);
 94                 System.out.println("得到列" + i + "是否爲只讀:" + isReadOnly);
 95                 System.out.println("得到列" + i + "可否出如今where中:"+ isSearchable);
 96                 
 97                 System.out.println();
 98             }
 99         }
100         
101     }
102 }
View Code

 

2.java獲取數據庫  庫信息以及具體主鍵 外鍵  索引等詳細信息mysql

  1 package com.sxd.mysqlInfo.test;
  2 
  3 import java.sql.DriverManager;
  4 import java.sql.ResultSet;
  5 import java.sql.SQLException;
  6 
  7 import org.junit.Test;
  8 
  9 import com.mysql.jdbc.Connection;
 10 import com.mysql.jdbc.DatabaseMetaData;
 11 
 12 public class MysqlInfo {
 13     
 14     private final String DRIVER = "com.mysql.jdbc.Driver";
 15     private final String URL = "jdbc:mysql://localhost:3306/";
 16     private final String USERNAME = "root";
 17     private final String PASSWORD = "root";
 18     
 19     @Test
 20     public void just4MySQLInfo() throws ClassNotFoundException, SQLException{
 21         Class.forName(DRIVER);
 22         Connection con = (Connection) DriverManager.getConnection(URL,USERNAME,PASSWORD);
 23         DatabaseMetaData metaData = (DatabaseMetaData) con.getMetaData();
 24         
 25         /**
 26          * 1.返回數據庫的相關信息
 27          */
 28          System.out.println("數據庫已知的用戶: "+ metaData.getUserName());   
 29          System.out.println("數據庫的系統函數的逗號分隔列表: "+ metaData.getSystemFunctions());   
 30          System.out.println("數據庫的時間和日期函數的逗號分隔列表: "+ metaData.getTimeDateFunctions());   
 31          System.out.println("數據庫的字符串函數的逗號分隔列表: "+ metaData.getStringFunctions());   
 32          System.out.println("數據庫供應商用於 'schema' 的首選術語: "+ metaData.getSchemaTerm());   
 33          System.out.println("數據庫URL: " + metaData.getURL());   
 34          System.out.println("是否容許只讀:" + metaData.isReadOnly());   
 35          System.out.println("數據庫的產品名稱:" + metaData.getDatabaseProductName());   
 36          System.out.println("數據庫的版本:" + metaData.getDatabaseProductVersion());   
 37          System.out.println("驅動程序的名稱:" + metaData.getDriverName());   
 38          System.out.println("驅動程序的版本:" + metaData.getDriverVersion()); 
 39          System.out.println();   
 40          System.out.println("數據庫中使用的表類型"); 
 41          
 42          ResultSet rs = metaData.getTableTypes();   
 43          while (rs.next()) {   
 44              System.out.println("1.-->"+rs.getString(1));  
 45          }   
 46          rs.close();   
 47          System.out.println();
 48          
 49          /**  
 50           * 獲取指定的數據庫的全部表的類型,getTables()的第一個參數就是數據庫名  
 51           * 由於與MySQL鏈接時沒有指定,這裏加上,剩下的參數就能夠爲null了  
 52           * 第二個參數是模式名稱的模式,可是輸出也是什麼都沒有。
 53           */  
 54          System.out.println("獲取指定的數據庫的全部表的類型");   
 55          ResultSet rs1 = metaData.getTables("biologyinfo", "",null, null);   
 56          while (rs1.next()) {   
 57              System.out.println();   
 58              System.out.println("數據庫名:"+ rs1.getString(1));   
 59              System.out.println("表名: "+rs1.getString(3));   
 60              System.out.println("類型: "+rs1.getString(4));   
 61          }   
 62          rs1.close();   
 63             
 64          System.out.println();   
 65          System.out.println("獲取指定的數據庫的表的主鍵");   
 66          //獲取指定的數據庫的表的主鍵,第二個參數也是模式名稱的模式,使用null了   第三個是表名稱  爲null表示能夠查到全部的表
 67          ResultSet rs2 = metaData.getPrimaryKeys("wxfirst", null, "materialinfo");   
 68          
 69          while (rs2.next()) {   
 70              System.out.println("表名稱: "+ rs2.getString(3));   
 71              System.out.println("主鍵名稱: "+ rs2.getString(4));   
 72              System.out.println("主鍵de序列號: "+ rs2.getString(5));   
 73              System.out.println("主鍵de名稱: "+ rs2.getString(6));   
 74          }   
 75          rs2.close();   
 76             
 77          System.out.println(); 
 78          
 79          
 80          /**
 81           * 獲取某個表的索引信息
 82           */
 83          System.out.println("DatabaseMetaData.getIndexInfo()方法返回信息:");   
 84          ResultSet rs3 = metaData.getIndexInfo("wxfirst", null, "materialinfo", false, true);   
 85          while (rs3.next()) {   
 86              System.out.println("數據庫名: "+ rs3.getString(1));   
 87              System.out.println("表模式: "+ rs3.getString(2));   
 88              System.out.println("表名稱: "+ rs3.getString(3));   
 89              System.out.println("索引值是否能夠不惟一: "+ rs3.getString(4));   
 90              System.out.println("索引類別: "+ rs3.getString(5));   
 91              System.out.println("索引名稱: "+ rs3.getString(6));   
 92              System.out.println("索引類型: "+ rs3.getString(7));   
 93              System.out.println("索引中的列序列號: "+ rs3.getString(8));   
 94              System.out.println("列名稱: "+ rs3.getString(9));   
 95              System.out.println("列排序序列: "+ rs3.getString(10));   
 96              System.out.println("TYPE爲 tableIndexStatistic時它是表中的行數不然它是索引中惟一值的數量: "+ rs3.getString(11));   
 97              System.out.println("TYPE爲 tableIndexStatisic時它是用於表的頁數不然它是用於當前索引的頁數: "+ rs3.getString(12));   
 98              System.out.println("過濾器條件: "+ rs3.getString(13));   
 99          }   
100          rs3.close();
101          
102          
103          System.out.println(); 
104          
105          /**
106           * 獲取某個表的全部列信息
107           */
108          System.out.println("DatabaseMetaData.getColumns()方法返回數據表列信息");
109          ResultSet rs4 = metaData.getColumns("wxfirst", null, "materialinfo", "mediaType");
110          while(rs4.next()){
111              System.out.println("數據庫名稱:"+rs4.getString(1));
112              System.out.println("表模式:"+rs4.getString(2));
113              System.out.println("表名稱:"+rs4.getString(3));
114              System.out.println("列名稱:"+rs4.getString(4));
115              System.out.println("SQL類型:"+rs4.getString(5));
116              System.out.println("數據源依賴類型名稱:"+rs4.getString(6));
117              System.out.println("列的大小:"+rs4.getString(7));
118              System.out.println("未被使用:"+rs4.getString(8));
119              System.out.println("小數部分的位數:"+rs4.getString(9));
120              System.out.println("基數:"+rs4.getString(10));
121              System.out.println("是否容許NULL:"+rs4.getString(11));
122              System.out.println("描述列的註釋:"+rs4.getString(12));
123              System.out.println("該列的默認值:"+rs4.getString(13));
124              System.out.println("未使用:"+rs4.getString(14));
125              System.out.println("未使用:"+rs4.getString(15));
126              System.out.println("對於char類型, 該長度是列中的最大字節數:"+rs4.getString(16));
127              System.out.println("表中列的索引:"+rs4.getString(17));
128              System.out.println("ISO規則用於肯定列是否包括NULL:"+rs4.getString(18));
129              System.out.println("表的類別:"+rs4.getString(19));
130              System.out.println("表的模式:"+rs4.getString(20));
131              System.out.println("表名稱:"+rs4.getString(21));
132              System.out.println("不一樣類型或用戶生成Ref類型:"+rs4.getString(22));
133              System.out.println("此列是否自增:"+rs4.getString(23));
134          }
135          rs4.close();
136          
137          
138          
139          
140          
141     }
142 }
View Code

相關文章
相關標籤/搜索