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、类图

在这里插入图片描述

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值