JDBC API 4.2(九):ResultSetMetaData 接口源码分析

1、简介

ResultSetMetaData 对象用于收集ResultSet的所有信息,例如列的类型和属性,列数,列的名称,列的数据类型等。简单来说,它用于收集 ResultSet 的信息。

ResultSetMetaData 封装了描述 ResultSet 对象的数据,内部提供了大量的方法来获取 ResultSet 的信息

下面的代码片段创建了 ResultSet 对象 rs,ResultSetMetaData 对象 rsmd,并使用rsmd 获取了 rs 有多少列,以及判断 rs 中的第一列是否可以在WHERE子句中使用。

ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM TABLE2");
ResultSetMetaData rsmd = rs.getMetaData();
int numberOfColumns = rsmd.getColumnCount();
boolean b = rsmd.isSearchable(1);

2、类图

JDBC API 4.2(九):ResultSetMetaData 接口源码分析_第1张图片

3、常用方法

方法 描述
int getColumnCount() throws SQLException 返回 ResultSet 对象列的数量
String getColumnName(int column) throws SQLException 根据指定的索引获取列名
int getColumnType(int column) throws SQLException 根据指定索引检索指定列的SQL类型
String getTableName(int column) throws SQLException 根据列索引获取表名
String getSchemaName(int column) 获取指定列的表的结构
int getScale(int column) throws SQLException 获取指定列的小数点右边的位数。 对于不适用小数位数的数据类型,返回0。
int getPrecision(int column) throws SQLException 获取指定列的指定列大小。 对于数字数据,这是最大精度。 对于字符数据,这是字符长度。 对于日期时间数据类型,这是字符串表示形式的字符长度(假设小数秒部分的最大允许精度)。 对于二进制数据,这是字节长度。 对于ROWID数据类型,这是字节长度。 对于列大小不适用的数据类型,返回0。
## 4、示例 ``` public class ResuleSetMetaDataDemo { //SQL语句 private static final String QUERY = "select id,name,email,country,password from Users";
public static void main(String[] args) {
    // Step 1: 创建连接对象 connection
    try (Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/lkf_db?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT", "root", "root");
         // Step 2:使用 connection 创建 stmt
         Statement stmt = connection.createStatement();
         // Step 3:执行SQL语句
         ResultSet rs = stmt.executeQuery(QUERY)) {
        //获取结果集 rs 的元数据对象 resultSetMetaData
        ResultSetMetaData resultSetMetaData = rs.getMetaData();
        System.out.println("1. 列数量 :: " + resultSetMetaData.getColumnCount());
        System.out.println("2. 第一列名称 :: " + resultSetMetaData.getColumnName(1));
        System.out.println("3. 数据库名称 :: " + resultSetMetaData.getCatalogName(1));
        ;
        System.out.println("4. 列数据类型 :: " + resultSetMetaData.getColumnTypeName(1));
        System.out.println("5. 表名 :: " + resultSetMetaData.getTableName(1));
    } catch (SQLException e) {
        printSQLException(e);
    }
}

public static void printSQLException(SQLException ex) {
    for (Throwable e : ex) {
        if (e instanceof SQLException) {
            e.printStackTrace(System.err);
            System.err.println("SQLState: " + ((SQLException) e).getSQLState());
            System.err.println("Error Code: " + ((SQLException) e).getErrorCode());
            System.err.println("Message: " + e.getMessage());
            Throwable t = ex.getCause();
            while (t != null) {
                System.out.println("Cause: " + t);
                t = t.getCause();
            }
        }
    }
}

}

输出结果:
  1. 列数量 :: 5
  2. 第一列名称 :: id
  3. 数据库名称 :: lkf_db
  4. 列数据类型 :: INT
  5. 表名 :: users

你可能感兴趣的:(【基础】JDBC,API)