好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Java中ResultSetMetaData 元数据的具体使用

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. 代码演示

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

代码:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

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. 结果图(一部分)

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

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测试数据/Lgold/learning/tree/df1887c456aa4a140839104de0408f9dedb67ca4/src/main/java/com/king/learning/ResultSetMetaData

到此这篇关于Java中ResultSetMetaData 元数据的具体使用的文章就介绍到这了,更多相关ResultSetMetaData 元数据内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

原文链接:https://blog.csdn.net/xueyijin/article/details/121456405

查看更多关于Java中ResultSetMetaData 元数据的具体使用的详细内容...

  阅读:19次