zoukankan      html  css  js  c++  java
  • 【java 获取数据库信息】获取MySQL或其他数据库的详细信息

    1.首先是 通过数据库获取数据表的详细列信息

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

      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

  • 相关阅读:
    让Div居中的方法
    创建对象的几种方式
    [Gport]2014移动互联网趋势——100名CEO的一句话解读
    专访腾讯云陈磊:微信云助力企业转型把握O2O时代价值
    Head First Python 学习笔记(第二章:分享你的代码)
    Head First Python 学习笔记(第一章:使用IDLE来帮助学习Python)
    《写给大家看的设计书》学习笔记
    用TreeView以递归显示选择磁盘上文件夹中全部文件夹和文件
    WebBrowser实现:自动填充网页上的用户名和密码并点击登录按钮
    C#调用免费天气预报WebService
  • 原文地址:https://www.cnblogs.com/sxdcgaq8080/p/6121137.html
Copyright © 2011-2022 走看看