为什么80%的码农都做不了架构师?>>>   

一、Java获取数据库表的各个字段的相关信息

在某些开发情景中,需要获取数据库中表的各个字段的相关信息,如字段名,字段类型,字段大小等信息。

DatabaseMetaData 是有关整个数据库的信息:表名、表的索引、数据库产品的名称和版本、数据库支持的操作。

ResultSet 是关于某个表的信息或一个查询的结果。您必须逐行访问数据行,但是您可以任何顺序访问列。

ResultSetMetaData 存储的是有关 ResultSet 中列的名称和类型的信息。

ResultSet 对象是 JDBC 中最重要的单个对象。从本质上讲,它是对一个一般宽度和未知长度的表的一种抽象。几乎所有的方法和查询都将数据作为 ResultSet 返回。ResultSet 包含任意数量的命名列,您可以按名称访问这些列。它还包含一个或多个行,您可以按顺序自上而下逐一访问。

使用 getMetaData() 方法从 ResultSet 中获取 ResultSetMetaData 对象。可以使用此对象获得列的各个相关信息。

使用ResultSetMetaData获取各列相关信息的代码示例如下:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.PreparedStatement;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
public class TestDemo {
public static Connection getConnection() {
Connection conn = null;
try {
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://数据库IP地址:3306/数据库名称";
String user = "数据库用户名";
String pass = "数据库用户密码";
conn = DriverManager.getConnection(url, user, pass);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
public static void main(String[] args) {Connection conn = getConnection();String sql = "select * from AccessType";PreparedStatement stmt;try {stmt = conn.prepareStatement(sql);ResultSet rSet = stmt.executeQuery(sql);ResultSetMetaData data = rSet.getMetaData();for (int i = 1; i <= data.getColumnCount(); i++) {// 获得所有列的数目及实际列数int columnCount = data.getColumnCount();// 获得指定列的列名String columnName = data.getColumnName(i);//String columnName = data.getColumnLabel(i);该函数也能获取列名// 获得指定列的列值int columnType = data.getColumnType(i);// 获得指定列的数据类型名String columnTypeName = data.getColumnTypeName(i);// 所在的Catalog名字String catalogName = data.getCatalogName(i);// 对应数据类型的类String columnClassName = data.getColumnClassName(i);// 在数据库中类型的最大字符个数int columnDisplaySize = data.getColumnDisplaySize(i);// 默认的列的标题String columnLabel = data.getColumnLabel(i);// 获得列的模式String schemaName = data.getSchemaName(i);// 某列类型的精确度(类型的长度)int precision = data.getPrecision(i);// 小数点后的位数int scale = data.getScale(i);// 获取某列对应的表名String tableName = data.getTableName(i);// 是否自动递增boolean isAutoInctement = data.isAutoIncrement(i);// 在数据库中是否为货币型boolean isCurrency = data.isCurrency(i);// 是否为空int isNullable = data.isNullable(i);// 是否为只读boolean isReadOnly = data.isReadOnly(i);// 能否出现在where中boolean isSearchable = data.isSearchable(i);System.out.println(columnCount);System.out.println("获得列" + i + "的字段名称:" + columnName);System.out.println("获得列" + i + "的类型,返回SqlType中的编号:"+ columnType);System.out.println("获得列" + i + "的数据类型名:" + columnTypeName);System.out.println("获得列" + i + "所在的Catalog名字:"+ catalogName);System.out.println("获得列" + i + "对应数据类型的类:"+ columnClassName);System.out.println("获得列" + i + "在数据库中类型的最大字符个数:"+ columnDisplaySize);System.out.println("获得列" + i + "的默认的列的标题:" + columnLabel);System.out.println("获得列" + i + "的模式:" + schemaName);System.out.println("获得列" + i + "类型的精确度(类型的长度):" + precision);System.out.println("获得列" + i + "小数点后的位数:" + scale);System.out.println("获得列" + i + "对应的表名:" + tableName);System.out.println("获得列" + i + "是否自动递增:" + isAutoInctement);System.out.println("获得列" + i + "在数据库中是否为货币型:" + isCurrency);System.out.println("获得列" + i + "是否为空:" + isNullable);System.out.println("获得列" + i + "是否为只读:" + isReadOnly);System.out.println("获得列" + i + "能否出现在where中:"+ isSearchable);}} catch (SQLException e) {e.printStackTrace();}}
}

二、如何直接通过ResultSet将数据转为Json对象?

根据以上所述,可以使用ResultMetaData,遍历每一条获取到的数据的列信息,以列名为key,值为value,存入Json对象中即可。

以下代码为简化版,没有考虑列数据的类型,都以String类型统一处理,其实还应该使用getColumnTypeName()函数判断该列的类型,并使用ResultSet对应的getXXX函数获取列的值。

public JSONObject mapper(ResultSet rSet) throws SQLException {JSONObject jsonObject = new JSONObject();//获取列数ResultSetMetaData metaData = rSet.getMetaData();int columnCount = metaData.getColumnCount();//遍历每一列for (int i = 1; i <= columnCount; i++) {//获取列名String columnName = metaData.getColumnName(i);String value = rSet.getString(columnName);jsonObject.put(columnName, value);                    }return jsonObject;
}

转载于:https://my.oschina.net/amui/blog/702803

Java获取数据库表的字段信息,及如何将ResultSet转为json相关推荐

  1. Java获取数据库表名、字段名、字段类型及注释等信息

    以前有小伙伴在公众号留言问过如何通过java获取数据库的所有表.及表里字段的信息,只是私信回复过. 在最近的项目中架构部提出了一个数据源的配置需求,就是需要配置公司所有系统的数据库.表等信息,便于大数 ...

  2. Java获取数据库表结构

    Java能够操作数据库,当然能够获取到数据库的表结构. 虽然各个DB厂商查询数据库表结构的语句不同,但是Java中通过封装,可以使用共同的API来获取. 各个具体的DB厂商有各自的实现,只需导入相应的 ...

  3. mysql中通过sql语句查询指定数据表的字段信息

      mysql数据库在安装完成时,自动创建了information_schema.mysql.test这三个数据库.其中,information_schema记录了创建的所有数据库的相关信息,因此可以 ...

  4. 获取MySQL数据库表结构的信息(字段名,字段类型,注释等)

    直接复制查询用就懂了!! select COLUMN_NAME,DATA_TYPE,COLUMN_COMMENT from information_schema.columns where TABLE ...

  5. java开发_mysql中获取数据库表描述_源码下载

    功能描述: 在mysql数据库中,有两张表: data_element_config , test_table 我们需要获取表:test_table表的描述信息,然后把描述信息插入到表:data_el ...

  6. Java 导出数据库表信息生成Word文档

    一.前言 最近看见朋友写了一个导出数据库生成word文档的业务,感觉很有意思,研究了一下,这里也拿出来与大家分享一波~ 先来看生成word文档效果吧 下面我们也来一起简单的实现吧 二.Java 导出数 ...

  7. mysql查询动态表名的数据类型_Mysql中查询某个数据库中所有表的字段信息

    前言 有时候,需要在数据库中查询一些字段的具体信息,而这些字段又存在于不同的表中,那么我们如何来查询呢? 在每一个数据库链接的information_schema数据库中,存在这样一张表--COLUM ...

  8. ASP获取数据库表名,字段名以及对字段的一些操作

    最近,在ASP论坛上看到很多网友问怎么获取数据库表名,字段名以及如何对字段进行删除,增添的操作故写此文. 本人对SQLServer比较熟一些,故以SQLServer为列:    <%       ...

  9. 如何从jdbc中获取数据库建表语句信息(表字段名称/表字段类型/表字段注释信息/表字段长度等等)

    * 如何从jdbc中获取数据库建表语句信息(表字段名称/表字段类型/表字段注释信息/表字段长度等等)  * 1,表字段名称  * 2,表字段类型  * 3,表字段注释信息 这里介绍3种方式,如下: 第 ...

最新文章

  1. 精读《手写 SQL 编译器 - 错误提示》
  2. Python语法基础(长期)
  3. 赠书福利 | 首本理论和实战结合的深度学习书籍
  4. 模块(sys/os/序列化模块)
  5. LeetCode 20. 有效的括号(栈)
  6. 有问有答 | 容器精华问答,如何玩转容器服务?
  7. 【递归与递推】青蛙过河
  8. python 发邮件 动态html_python 邮件发送html文件
  9. hashmap怎么取值_HashMap?面试?我是谁?我在哪
  10. 简单理解盘索引地址的表示原理
  11. Linux下安装vim
  12. c# 导出Excel
  13. 理解SSD核心技术FTL
  14. CRMEB开源商城部署在腾讯云
  15. 已知法向量 求投影_空间直线在平面上投影方程的多种解法
  16. 计算机视觉文献综述选题,综述论文2021-计算机视觉十大领域最新综述文章分类大盘点...
  17. 自锁时间电路plc_自锁与互锁电路的plc梯形图程序【图】
  18. python字典相乘_python集合、元组、字典
  19. Apache启动失败,请检查相关配置。√MySQL5.1已启动。
  20. 2018年世界计算机超算大赛,2018ASC世界大学生超算竞赛开赛:11队齐破赛会纪录...

热门文章

  1. Web.config配置文件详解(新手必看)
  2. 业界资讯: Air 2.0 beta 版本 发布
  3. 第1章 故障处理方法
  4. 优质免费在线学习网站【自用】
  5. 关于键盘上方创建返回按钮
  6. JAVA WEB新进展
  7. java11 新特性 详解
  8. WCF BasicHttpBinding 安全解析(4)windows验证(IIS宿主)
  9. vuex中获取的数据使用v-model绑定出问题
  10. mysql数据库表的基本操作