Java中ResultSetMetaData 元数据的具体使用

作者:搏·梦 时间:2021-06-25 12:38:13 

1. 前言

ResultSetMetaData 叫元数据,是数据库 列对象,以列为单位封装为对象

元数据,指的是其包含列名,列值,列类型,列长度等等有用信息

2. 常用方法介绍

ResultSetMetaData 常用方法:

1).  metaData.getColumnName(i)         获取该列的原始名字
2).  metaData.getColumnLabel(i)        获取该列的别名
3).  metaData.getColumnClassName(i)    获取该列的(在java中的)数据类型
4).  metaData.getColumnType(i)         获取该列的(在数据库中的)数据类型对应的序号
5).  metaData.getColumnTypeName(i)     获取该列的(在数据库中的)数据类型
6).  metaData.getScale(i)              获取该列中小数点右边的位数
7).  metaData.getColumnDisplaySize(i)  获取该列的长度
8).  metaData.isAutoIncrement(i)       判断该列的值是否自动递增
9).  metaData.isNullable(i)            判断该列的值是否为null
10).  metaData.getTableName(i)          获取表名

3. 代码演示

先准备好一张表,如下图:

Java中ResultSetMetaData 元数据的具体使用

Java中ResultSetMetaData 元数据的具体使用

代码:

public class Test {

private static final String URL = "jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8";
   private static final String USERNAME = "root";
   private static final String PASSWORD = "root";

public static void main(String[] args) throws Exception {
       Class.forName("com.mysql.cj.jdbc.Driver");
       Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
       // sql 语句 是使用了 别名的
       PreparedStatement preparedStatement = connection.prepareStatement("select id as ID, username as USERNAME, birthday as BIRTHDAY, sex as SEX, address as ADDRESS, money as MONEY  from user ");
       ResultSet resultSet = preparedStatement.executeQuery();
       // 获取元数据对象
       ResultSetMetaData metaData = resultSet.getMetaData();
       // 获取一共有多少列
       int columnCount = metaData.getColumnCount();
       // 将数据封装为Map
       List<Map<String, Object>> list = new ArrayList<>();
       while (resultSet.next()) {
           Map<String, Object> columnMap = new HashMap<>();
           // 注:列名的索引 起始是 1 不是 0
           for (int i = 1; i <= columnCount; i++) {
               System.out.println("getColumnName(i): " + metaData.getColumnName(i));
               System.out.println("getColumnLabel(i): " + metaData.getColumnLabel(i));
               System.out.println("getColumnClassName(i): " + metaData.getColumnClassName(i));
               System.out.println("getColumnType(i): " + metaData.getColumnType(i));
               System.out.println("getColumnTypeName(i): " + metaData.getColumnTypeName(i));
               System.out.println("getScale(i): " + metaData.getScale(i));
               System.out.println("isNullable(i): " + metaData.isNullable(i));
               System.out.println("isAutoIncrement(i): " + metaData.isAutoIncrement(i));
               System.out.println("getTableName(i): " + metaData.getTableName(i));
               System.out.println();

String key = metaData.getColumnName(i);
               Object value = resultSet.getObject(key);
               columnMap.put(key, value);
           }
           list.add(columnMap);
       }
       System.out.println();
       System.out.println(list);
       resultSet.close();
       preparedStatement.close();
       connection.close();
   }
}

4. 结果图(一部分)

getColumnName(i): id
getColumnLabel(i): ID
getColumnClassName(i): java.lang.Integer
getColumnType(i): 4
getColumnTypeName(i): INT
getScale(i): 0
isNullable(i): 0
isAutoIncrement(i): true   // id 自增 因此为true
getTableName(i): user

getColumnName(i): username
getColumnLabel(i): USERNAME
getColumnClassName(i): java.lang.String
getColumnType(i): 12
getColumnTypeName(i): VARCHAR
getScale(i): 0
isNullable(i): 0
isAutoIncrement(i): false
getTableName(i): user

getColumnName(i): birthday
getColumnLabel(i): BIRTHDAY
getColumnClassName(i): java.time.LocalDateTime
getColumnType(i): 93
getColumnTypeName(i): DATETIME
getScale(i): 0
isNullable(i): 1
isAutoIncrement(i): false
getTableName(i): user

getColumnName(i): sex
getColumnLabel(i): SEX
getColumnClassName(i): java.lang.String
getColumnType(i): 1
getColumnTypeName(i): CHAR
getScale(i): 0
isNullable(i): 1
isAutoIncrement(i): false
getTableName(i): user

getColumnName(i): address
getColumnLabel(i): ADDRESS
getColumnClassName(i): java.lang.String
getColumnType(i): 12
getColumnTypeName(i): VARCHAR
getScale(i): 0
isNullable(i): 1
isAutoIncrement(i): false
getTableName(i): user

getColumnName(i): money
getColumnLabel(i): MONEY
getColumnClassName(i): java.math.BigDecimal
getColumnType(i): 3
getColumnTypeName(i): DECIMAL
getScale(i): 3     // 在数据库中该列值是 decimal 且是3位小数 因此得出 3
isNullable(i): 1
isAutoIncrement(i): false
getTableName(i): user

list:结果:
[
{birthday=2021-02-27T17:47:08, address=北京, money=10.580, sex=男, id=41, username=老王}, 
{birthday=2021-03-02T15:09:37, address=北京, money=10.580, sex=女, id=42, username=小二王}, 
{birthday=2021-03-04T11:34:34, address=北京, money=10.580, sex=女, id=43, username=小二王}, 
{birthday=2021-03-04T12:04:06, address=北京, money=10.580, sex=男, id=45, username=大王}, 
{birthday=2021-03-07T17:37:26, address=北京, money=10.580, sex=男, id=46, username=老王}, 
{birthday=2021-03-08T11:44, address=北京, money=10.580, sex=女, id=48, username=小马}, 
{birthday=null, address=null, money=null, sex=男, id=50, username=kkooop}
]

5. 源码

https://gitee.com/Lgold/learning/tree/df1887c456aa4a140839104de0408f9dedb67ca4/src/main/java/com/king/learning/ResultSetMetaData

来源:https://blog.csdn.net/xueyijin/article/details/121456405

标签:ResultSetMetaData,元数据
0
投稿

猜你喜欢

  • Java实现颜色渐变效果

    2023-08-25 11:10:45
  • JavaWeb开发之使用jQuery与Ajax实现动态联级菜单效果

    2023-11-28 19:46:08
  • Java开发中可以防止界面假死的刷新代码

    2023-11-23 22:23:41
  • Java Swing实现坦克大战游戏

    2021-12-16 21:04:03
  • Java虚拟机之类加载

    2022-11-15 05:19:19
  • Springboot Vue可配置调度任务实现示例详解

    2023-11-09 03:33:19
  • Java Stream流的常见生成和操作方法总结

    2023-08-26 12:06:21
  • Java 序列化和反序列化实例详解

    2023-11-23 04:43:44
  • java基础二叉搜索树图文详解

    2023-06-01 05:43:19
  • Java字符判断的小例子

    2023-08-26 17:29:49
  • java 并发线程个数的如何确定

    2022-01-01 21:52:13
  • 第三方包jintellitype实现Java设置全局热键

    2023-09-25 10:33:50
  • springboot自定义stater启动流程

    2023-06-07 06:33:45
  • Java集合类中文介绍

    2022-07-22 18:02:20
  • Spring MVC请求参数接收的全面总结教程

    2023-11-28 19:44:47
  • Springboot Thymeleaf模板文件调用Java类静态方法

    2023-11-25 05:34:47
  • IDEA设置背景为自定义照片的操作方法

    2022-12-28 09:13:08
  • java 文件上传到读取文件内容的实例

    2023-11-09 22:00:27
  • feign实现传递参数的三种方式小结

    2021-06-18 00:09:53
  • java入门概念个人理解之package与import浅析

    2021-07-09 10:18:55
  • asp之家 软件编程 m.aspxhome.com