元数据:除了表之外的数据都可以看做是元数据,可以分为三类

  • 查询结果信息: UPDATE 或 DELETE语句 受影响的记录数。
  • 数据库和数据表的信息: 包含了数据库及数据表的结构信息。
  • MySQL服务器信息: 包含了数据库服务器的当前状态,版本号等。

SQL中获取元数据信息命令

# 元数据相关命令
# 1.查看服务器当前状态
SHOW STATUS;

# 2.查看MySQL的版本信息
SELECT VERSION();

# 3.查看表中的详细信息
SHOW COLUMNS FROM employee0;

# 4.显示数据表的索引信息
SHOW INDEX FROM testbatch;

# 5.列出所有数据库
SHOW DATABASES;

# 6.列出当前数据库中所有表
SHOW TABLES;

# 7.获取当前数据库名
SELECT DATABASE();

JDBC获取元数据

  • JDBC中描述元数据的类:

元数据类

作用

DataBaseMetaData

描述数据库的元数据对象

ResultSetMetaData

描述结果集的元数据对象

  • 获取元数据对象的方法:getMetaData()
    ①connection对象:调用 getMetaData()方法,获取的是DatabaseMetaData,数据库元数据对象

方法

说明

getURL()

获取数据库的url

getUserName()

获取当前数据库的用户名

getDatabaseProductName()

获取数据库的产品名称

getDatabaseProductVersion()

获取数据的版本号

getDriverName()

返回驱动程序的名称

isReadOnly()

判断数据库是否只允许只读 true 代表只读

  • ②PrepareStatement对象:调用getMetaData(),获取的是ResultSetMetaData,结果集元数据对象

方法

说明

getColumnCount()

当前结果集共有多少列

getColumnName(int i)

获取指定列号的列名, 参数是整数 从1开始

getColumnTypeName(int i)

获取指定列号列的类型, 参数是整数 从1开始

public class TestMetaData {
    // 获取数据库相关元数据信息,使用DatabaseMetaData
    @Test
    public void testDataBaseMetaData() throws Exception {
        // 获取链接
        Connection conn = DruidUtils.getConnection();
        // 获取代表数据库的元数据对象
        DatabaseMetaData metaData = conn.getMetaData();
        // 获取数据库相关元数据信息
        String url = metaData.getURL();
        System.out.println("数据库的url:" + url);
        String userName = metaData.getUserName();
        System.out.println("用户名:" + userName);
        String databaseProductName = metaData.getDatabaseProductName();
        System.out.println("数据库产品名称:" + databaseProductName);
        String databaseProductVersion = metaData.getDatabaseProductVersion();
        System.out.println("数据库版本:" + databaseProductVersion);
        String driverName = metaData.getDriverName();
        System.out.println("驱动名称" + driverName);
        // 判断当前数据库是否为 “只读”
        boolean readOnly = metaData.isReadOnly();
        if (readOnly) {  System.out.println("当前数据库为“只读”");  }else {  System.out.println("当前数据库不是“只读”");  }
        // 关掉
        conn.close();
    }

    @Test
    public void testResultSetMetaData() throws Exception {
        // 获取连接
        Connection conn = DruidUtils.getConnection();
        // 获取预处理对象
        PreparedStatement pstmt = conn.prepareStatement("select * from employee0");
        ResultSet rs = pstmt.executeQuery();
        // 获取结果集元数据对象
        ResultSetMetaData metaData = pstmt.getMetaData();
        // 获取当前结果集共有多少列
        int columnCount = metaData.getColumnCount();
        System.out.println("当前结果集中共有:" + columnCount + "列");
        // 获取结果集中的名称和类型
        for (int i = 1; i < columnCount; i++) {
            String columnName = metaData.getColumnName(i);
            System.out.print("列名:" + columnName);
            String columnTypeName = metaData.getColumnTypeName(i);
            System.out.println("   类型:" + columnTypeName);
        }
        // 释放资源
        DruidUtils.close(conn,pstmt,rs);
    }
}