JDBC的DatabaseMetaData记录

DatabaseMetaData

DatabaseMetaData记录了元数据信息,下面将记录获取的方法

DBConnUtil 连接工具

public class DBConnUtil {
	public static final String MYSQL_DRI = "com.mysql.jdbc.Driver";
	public static Connection getDbConnection(String jdbcURL, String userName, String password) throws Exception{
		Connection conn =null;
		Class.forName(MYSQL_DRI);
		try {
			conn = DriverManager.getConnection(jdbcURL, userName, password);
		}catch(Exception e) {
			throw new Exception(e);
		}
		return conn;
    }
	public static void closeConn(Connection conn)throws Exception{
		if(conn!=null) {
			conn.close();
		}
	}
}

查询表的表头信息

  public static void main(String[] args) {
        String url ="jdbc:mysql://dev-vm-00:3306/poc?autoReconnect=true&useUnicode=true&characterEncoding=utf-8&useSSL=false";
        String user="test";
        String pwd = "test";
        try (Connection conn = DBConnUtil.getDbConnection(url, user, pwd)) {
            System.out.println("==============start==========");
            DatabaseMetaData metaData1 = conn.getMetaData();
            ResultSet rs =null;
            //catalog 类别名称;它必须与存储在数据库中的类别名称匹配;该参数为 "" 表         示获取没有类别的那些描述;为 null 则表示该类别名称不应该用于缩小搜索范围
            //schemaPattern 数据库名,对于oracle来说就用户名
            //tableNamePattern 表名称模式;它必须与存储在数据库中的表名称匹配,支持模糊查询,%和_连个占位符,和在数据库中占位符意义一样
            //types 表的类型(TABLE | VIEW)
             rs = metaData1.getTables(null, null, "%", new String[]{"TABLE"});
           
            //结果集的元数据
            ResultSetMetaData rsmd = rs.getMetaData();
            for (int i = 1 ; i <= rsmd.getColumnCount(); i++ ){
                String column = rsmd.getColumnName(i);
                System.out.println(column);
            }
       

            rs.close();
        }catch (Exception e){
                  e.printStackTrace();
        }
    }
}

结果输出:

TABLE_CAT String
TABLE_SCHEM String
TABLE_NAME String
TABLE_TYPE String
REMARKS String

稍微解释一下这几个是什么意思:

TABLE_CAT String => 表类别–数据库名称
TABLE_SCHEM String => 表模式
TABLE_NAME String => 表名称
TABLE_TYPE String => 表类型
REMARKS String => 表备注

查询表信息

    public static void main(String[] args) {
        String url ="jdbc:mysql://dev-vm-00:3306/poc?autoReconnect=true&useUnicode=true&characterEncoding=utf-8&useSSL=false";
        String user="test";
        String pwd = "test";
        try (Connection conn = DBConnUtil.getDbConnection(url, user, pwd)) {
            System.out.println("==============start==========");
            DatabaseMetaData metaData1 = conn.getMetaData();
            ResultSet rs =null;
            //catalog 类别名称;它必须与存储在数据库中的类别名称匹配;该参数为 "" 表示获取没有类别的那些描述;为 null 则表示该类别名称不应该用于缩小搜索范围
            //schemaPattern 数据库名,对于oracle来说就用户名
            //tableNamePattern 表名称模式;它必须与存储在数据库中的表名称匹配,支持模糊查询,%和_连个占位符,和在数据库中占位符意义一样
            //types 表的类型(TABLE | VIEW)
             rs = metaData1.getTables(null, null, "%", new String[]{"TABLE"});
            //结果集的元数据
            ResultSetMetaData rsmd = rs.getMetaData();
            for (int i = 1 ; i <= rsmd.getColumnCount(); i++ ){
                String column = rsmd.getColumnName(i);
                System.out.println(column);
            }
            //输出了TABLE_CAT String => 表类别-数据库名称
			//TABLE_SCHEM String => 表模式
			//TABLE_NAME String => 表名称
			//TABLE_TYPE String => 表类型
			//REMARKS String => 表备注
            while (rs.next()){
               //根据元数据表头找到想要的数据 如下想要表名就 
                String table_name = rs.getString("TABLE_NAME");
                System.out.println("表名:"+table_name);
            }
            rs.close();
        }catch (Exception e){
                  e.printStackTrace();
        }
    }

查看列表头信息

    public static void main(String[] args) {
        String url ="jdbc:mysql://dev-vm-00:3306/poc?autoReconnect=true&useUnicode=true&characterEncoding=utf-8&useSSL=false";
        String user="test";
        String pwd = "test";
        try (Connection conn = DBConnUtil.getDbConnection(url, user, pwd)) {
            System.out.println("==============start==========");
            DatabaseMetaData metaData1 = conn.getMetaData();
            ResultSet rs =null;
            // 得到全部列名
            // String catalog 类别名称;它必须与存储在数据库中的类别名称匹配;该参数为 "" 表示获取没有类别的那些描述;为 null 则表示该类别名称不应该用于缩小搜索范围
            // String schemaPattern 模式名称的模式;它必须与存储在数据库中的模式名称匹配;该参数为 "" 表示获取没有模式的那些描述;为 null 则表示该模式名称不应该用于缩小搜索范围
            // String tableNamePattern 表名称模式;它必须与存储在数据库中的表名称匹配
            // String columnNamePattern 列名称模式;它必须与存储在数据库中的列名称匹配
            // 每一行都是一个列描述
            rs = conn.getMetaData().getColumns(null, null, "%","%");

            //结果集的元数据
            ResultSetMetaData rsmd = rs.getMetaData();
            for (int i = 1 ; i <= rsmd.getColumnCount(); i++ ){
                String column = rsmd.getColumnName(i);
                System.out.println(column);
            }
            rs.close();
        }catch (Exception e){
                  e.printStackTrace();
        }
    }

输出:

TABLE_CAT
TABLE_SCHEM
TABLE_NAME
COLUMN_NAME
DATA_TYPE
TYPE_NAME
COLUMN_SIZE
BUFFER_LENGTH
DECIMAL_DIGITS
NUM_PREC_RADIX
NULLABLE
REMARKS
COLUMN_DEF
SQL_DATA_TYPE
SQL_DATETIME_SUB
CHAR_OCTET_LENGTH
ORDINAL_POSITION
IS_NULLABLE
SCOPE_CATALOG
SCOPE_SCHEMA
SCOPE_TABLE
SOURCE_DATA_TYPE
IS_AUTOINCREMENT

表头解释:

TABLE_CAT:表类别(可能为空)
TABLE_SCHEM:表模式(可能为空)
TABLE_NAME:表名
COLUMN_NAME:列名
DATA_TYPE:对应的java.sql.Types的SQL类型(列类型ID)
TYPE_NAME:java.sql.Types类型名称(列类型名称)
COLUMN_SIZE:列大小
BUFFER_LENGTH:缓冲长度(有待验证)
DECIMAL_DIGITS:小数位数
NUM_PREC_RADIX:/基数(通常是10或2,有待验证)
NULLABLE:是否允许为null
REMARKS:列描述
COLUMN_DEF:默认值
SQL_DATA_TYPE:SQL数据类型(有待验证)
SQL_DATETIME_SUB:SQL时间间隔(有待验证)
CHAR_OCTET_LENGTH:对于 char 类型,该长度是列中的最大字节数
ORDINAL_POSITION:表中列的索引(从1开始)
IS_NULLABLE:是否允许为null,0为不允许为空,1为允许为空,2为不确定

查询列信息

    public static void main(String[] args) {
        String url ="jdbc:mysql://dev-vm-00:3306/poc?autoReconnect=true&useUnicode=true&characterEncoding=utf-8&useSSL=false";
        String user="test";
        String pwd = "test";
        try (Connection conn = DBConnUtil.getDbConnection(url, user, pwd)) {
            System.out.println("==============start==========");
            DatabaseMetaData metaData1 = conn.getMetaData();
            ResultSet rs =null;
            // 得到全部列名
            // String catalog 类别名称;它必须与存储在数据库中的类别名称匹配;该参数为 "" 表示获取没有类别的那些描述;为 null 则表示该类别名称不应该用于缩小搜索范围
            // String schemaPattern 模式名称的模式;它必须与存储在数据库中的模式名称匹配;该参数为 "" 表示获取没有模式的那些描述;为 null 则表示该模式名称不应该用于缩小搜索范围
            // String tableNamePattern 表名称模式;它必须与存储在数据库中的表名称匹配
            // String columnNamePattern 列名称模式;它必须与存储在数据库中的列名称匹配
            // 每一行都是一个列描述
            rs = conn.getMetaData().getColumns(null, null, "%","%");

            //结果集的元数据(不需要可以忽略)
            ResultSetMetaData rsmd = rs.getMetaData();
            for (int i = 1 ; i <= rsmd.getColumnCount(); i++ ){
                String column = rsmd.getColumnName(i);
                System.out.println(column);
            }
            
            //可查看上面输出的表头解释
            
            while (rs.next()){
                
                String table_name = rs.getString("TABLE_NAME");
                String column_name = rs.getString("COLUMN_NAME");
                System.out.println("表名:"+table_name+"=>列名:"+column_name);
            }
            rs.close();
        }catch (Exception e){
                  e.printStackTrace();
        }
    }

查询sql也可以获取到表头

    public static void main(String[] args) {
        String url ="jdbc:mysql://dev-vm-00:3306/poc?autoReconnect=true&useUnicode=true&characterEncoding=utf-8&useSSL=false";
        String user="test";
        String pwd = "test";
        try (Connection conn = DBConnUtil.getDbConnection(url, user, pwd)) {
            System.out.println("==============start==========");
            Statement statement = conn.createStatement();
            ResultSet rs = statement.executeQuery(" select  * from ind_relation ");
            ResultSetMetaData metaData = rs.getMetaData();
            int columnCount = metaData.getColumnCount();
            for (int i=1;i<=columnCount;i++){
                String catalogName = metaData.getColumnName(i);
                metaData.getTableName(i);
                String catalogName1 = metaData.getCatalogName(i);
                System.out.println("catalogName1:"+catalogName1);
                String columnTypeName = metaData.getColumnTypeName(i);
                System.out.println("数据类型"+columnTypeName);
                System.out.println(catalogName);
            }
            }catch (Exception e){
                  e.printStackTrace();
        }
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值