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. 代码演示
先准备好一张表,如下图:
代码:
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


猜你喜欢
- 今天看到一个ios写的图灵机器人,直接去官网(http://www.tuling123.com/openapi/)看了下API接入,太简单了
- 1. 简介zookeeper是一个开源的分布式协调服务, 提供分布式数据一致性解决方案,分布式应用程序可以实现数据统一配置管理、统一命名服务
- 一、Lombok从上一篇博客可看出,DAO接口类的编写变得简单,反过来看模型,编写还需要(私有属性、setter...getter...方法
- Spring Cloud Gateway是Spring 官方基于Spring 5.0、Spring Boot 2.0和Project Rea
- 一、前言环境:jdk 1.8,SpringCloud Greenwich.SR2。如题,springcloud config-client启
- 本文实例讲述了Java实现的读取资源文件工具类ResourcesUtil。分享给大家供大家参考,具体如下:package com.gclou
- 本文的主要内容包括在下图,下面来一起看看吧。1、&和&&的区别2、switchswitch语句能否作用在byte,能
- this总要有个事物来代表类的当前对象,就像C++中的this指针一样,Java中的this关键字就是代表当前对象的引用。它有三个主要的作用
- GitHub 地址:quickjs-android-wrapper特性支持 Java 和 JavaScript 类型互转支持 Promise
- 为了方便客户抓取Log,现通过TCP协议连接指定服务器,传输指定内容,定义指定目录,IP,PORT字段接收参数。直接上代码 public s
- 一、前言代码死循环这个话题,个人觉得还是挺有趣的。因为只要是开发人员,必定会踩过这个坑。如果真的没踩过,只能说明你代码写少了,或者是真正的大
- 0、线程的本质线程不是一个计算机硬件的功能,而是操作系统提供的一种逻辑功能,线程本质上是进程中一段并发运行的代码,所以线程需要操作系统投入C
- 前面几篇案例已经将常用的交换器(DirectExchange、TopicExchange、FanoutExchange)的用法介绍完了,现在
- 前言属于基础的面试问题,一定要能够回答全哦~一、继承Thread,重写run方法通过自定义一个类(这里起名为:MyThread),继承Thr
- 目录1 简介2 项目整合2.1 JWT整合2.1.1 JWT工具类2.1.2 Token处理的Filter2.1.3 JWT属性2.2 Sp
- 最近项目需要用到可以滑动删除并且带有上拉加载下拉刷新的Listview,查阅了一些资料,大多都是在SwipeMenuListView的基础上
- 如果我们在浏览器地址栏乱敲的时候,所敲入的所有未定义的URL都能被程序捕捉到,然后转到一个自制的404错误处理页面。先看效果图登陆页面主页面
- C#利用win32 Api 修改本地系统时间、获取硬盘序列号,可以用于软件注册机制的编写!using System;using System
- private void Value_ByteArray(){double doublevalue = 258.0;Int32 intval
- 介绍Spring Profiles 提供了一套隔离应用配置的方式,不同的 profiles 提供不同组合的配置,在不同的环境中,应用在启动时