当前位置:Gxlcms > 数据库问题 > 【java 获取数据库信息】获取MySQL或其他数据库的详细信息

【java 获取数据库信息】获取MySQL或其他数据库的详细信息

时间:2021-07-01 10:21:17 帮助过:9人阅读

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获取数据库  库信息以及具体主键 外键  索引等详细信息

技术分享
  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

技术分享

 

【java 获取数据库信息】获取MySQL或其他数据库的详细信息

标签:local   term   final   product   table   closed   imp   ted   ring   

人气教程排行