经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » Java » 查看文章
Java中ResultSetMetaData 元数据的具体使用
来源:jb51  时间:2023/4/26 8:50:03  对本文有异议

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. public class Test {
  2.  
  3. private static final String URL = "jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8";
  4. private static final String USERNAME = "root";
  5. private static final String PASSWORD = "root";
  6.  
  7. public static void main(String[] args) throws Exception {
  8. Class.forName("com.mysql.cj.jdbc.Driver");
  9. Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
  10. // sql 语句 是使用了 别名的
  11. 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 ");
  12. ResultSet resultSet = preparedStatement.executeQuery();
  13. // 获取元数据对象
  14. ResultSetMetaData metaData = resultSet.getMetaData();
  15. // 获取一共有多少列
  16. int columnCount = metaData.getColumnCount();
  17. // 将数据封装为Map
  18. List<Map<String, Object>> list = new ArrayList<>();
  19. while (resultSet.next()) {
  20. Map<String, Object> columnMap = new HashMap<>();
  21. // 注:列名的索引 起始是 1 不是 0
  22. for (int i = 1; i <= columnCount; i++) {
  23. System.out.println("getColumnName(i): " + metaData.getColumnName(i));
  24. System.out.println("getColumnLabel(i): " + metaData.getColumnLabel(i));
  25. System.out.println("getColumnClassName(i): " + metaData.getColumnClassName(i));
  26. System.out.println("getColumnType(i): " + metaData.getColumnType(i));
  27. System.out.println("getColumnTypeName(i): " + metaData.getColumnTypeName(i));
  28. System.out.println("getScale(i): " + metaData.getScale(i));
  29. System.out.println("isNullable(i): " + metaData.isNullable(i));
  30. System.out.println("isAutoIncrement(i): " + metaData.isAutoIncrement(i));
  31. System.out.println("getTableName(i): " + metaData.getTableName(i));
  32. System.out.println();
  33.  
  34. String key = metaData.getColumnName(i);
  35. Object value = resultSet.getObject(key);
  36. columnMap.put(key, value);
  37. }
  38. list.add(columnMap);
  39. }
  40. System.out.println();
  41. System.out.println(list);
  42. resultSet.close();
  43. preparedStatement.close();
  44. connection.close();
  45. }
  46. }

4. 结果图(一部分)

  1. getColumnName(i): id
  2. getColumnLabel(i): ID
  3. getColumnClassName(i): java.lang.Integer
  4. getColumnType(i): 4
  5. getColumnTypeName(i): INT
  6. getScale(i): 0
  7. isNullable(i): 0
  8. isAutoIncrement(i): true // id 自增 因此为true
  9. getTableName(i): user
  10.  
  11. getColumnName(i): username
  12. getColumnLabel(i): USERNAME
  13. getColumnClassName(i): java.lang.String
  14. getColumnType(i): 12
  15. getColumnTypeName(i): VARCHAR
  16. getScale(i): 0
  17. isNullable(i): 0
  18. isAutoIncrement(i): false
  19. getTableName(i): user
  20.  
  21. getColumnName(i): birthday
  22. getColumnLabel(i): BIRTHDAY
  23. getColumnClassName(i): java.time.LocalDateTime
  24. getColumnType(i): 93
  25. getColumnTypeName(i): DATETIME
  26. getScale(i): 0
  27. isNullable(i): 1
  28. isAutoIncrement(i): false
  29. getTableName(i): user
  30.  
  31. getColumnName(i): sex
  32. getColumnLabel(i): SEX
  33. getColumnClassName(i): java.lang.String
  34. getColumnType(i): 1
  35. getColumnTypeName(i): CHAR
  36. getScale(i): 0
  37. isNullable(i): 1
  38. isAutoIncrement(i): false
  39. getTableName(i): user
  40.  
  41. getColumnName(i): address
  42. getColumnLabel(i): ADDRESS
  43. getColumnClassName(i): java.lang.String
  44. getColumnType(i): 12
  45. getColumnTypeName(i): VARCHAR
  46. getScale(i): 0
  47. isNullable(i): 1
  48. isAutoIncrement(i): false
  49. getTableName(i): user
  50.  
  51. getColumnName(i): money
  52. getColumnLabel(i): MONEY
  53. getColumnClassName(i): java.math.BigDecimal
  54. getColumnType(i): 3
  55. getColumnTypeName(i): DECIMAL
  56. getScale(i): 3 // 在数据库中该列值是 decimal 且是3位小数 因此得出 3
  57. isNullable(i): 1
  58. isAutoIncrement(i): false
  59. 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

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

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号