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 }
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 }