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。 |
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();
}
}
}
}
}
输出结果:
- 列数量 :: 5
- 第一列名称 :: id
- 数据库名称 :: lkf_db
- 列数据类型 :: INT
- 表名 :: users