Java获取数据库表的字段信息,及如何将ResultSet转为json
为什么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相关推荐
- Java获取数据库表名、字段名、字段类型及注释等信息
以前有小伙伴在公众号留言问过如何通过java获取数据库的所有表.及表里字段的信息,只是私信回复过. 在最近的项目中架构部提出了一个数据源的配置需求,就是需要配置公司所有系统的数据库.表等信息,便于大数 ...
- Java获取数据库表结构
Java能够操作数据库,当然能够获取到数据库的表结构. 虽然各个DB厂商查询数据库表结构的语句不同,但是Java中通过封装,可以使用共同的API来获取. 各个具体的DB厂商有各自的实现,只需导入相应的 ...
- mysql中通过sql语句查询指定数据表的字段信息
mysql数据库在安装完成时,自动创建了information_schema.mysql.test这三个数据库.其中,information_schema记录了创建的所有数据库的相关信息,因此可以 ...
- 获取MySQL数据库表结构的信息(字段名,字段类型,注释等)
直接复制查询用就懂了!! select COLUMN_NAME,DATA_TYPE,COLUMN_COMMENT from information_schema.columns where TABLE ...
- java开发_mysql中获取数据库表描述_源码下载
功能描述: 在mysql数据库中,有两张表: data_element_config , test_table 我们需要获取表:test_table表的描述信息,然后把描述信息插入到表:data_el ...
- Java 导出数据库表信息生成Word文档
一.前言 最近看见朋友写了一个导出数据库生成word文档的业务,感觉很有意思,研究了一下,这里也拿出来与大家分享一波~ 先来看生成word文档效果吧 下面我们也来一起简单的实现吧 二.Java 导出数 ...
- mysql查询动态表名的数据类型_Mysql中查询某个数据库中所有表的字段信息
前言 有时候,需要在数据库中查询一些字段的具体信息,而这些字段又存在于不同的表中,那么我们如何来查询呢? 在每一个数据库链接的information_schema数据库中,存在这样一张表--COLUM ...
- ASP获取数据库表名,字段名以及对字段的一些操作
最近,在ASP论坛上看到很多网友问怎么获取数据库表名,字段名以及如何对字段进行删除,增添的操作故写此文. 本人对SQLServer比较熟一些,故以SQLServer为列: <% ...
- 如何从jdbc中获取数据库建表语句信息(表字段名称/表字段类型/表字段注释信息/表字段长度等等)
* 如何从jdbc中获取数据库建表语句信息(表字段名称/表字段类型/表字段注释信息/表字段长度等等) * 1,表字段名称 * 2,表字段类型 * 3,表字段注释信息 这里介绍3种方式,如下: 第 ...
最新文章
- 精读《手写 SQL 编译器 - 错误提示》
- Python语法基础(长期)
- 赠书福利 | 首本理论和实战结合的深度学习书籍
- 模块(sys/os/序列化模块)
- LeetCode 20. 有效的括号(栈)
- 有问有答 | 容器精华问答,如何玩转容器服务?
- 【递归与递推】青蛙过河
- python 发邮件 动态html_python 邮件发送html文件
- hashmap怎么取值_HashMap?面试?我是谁?我在哪
- 简单理解盘索引地址的表示原理
- Linux下安装vim
- c# 导出Excel
- 理解SSD核心技术FTL
- CRMEB开源商城部署在腾讯云
- 已知法向量 求投影_空间直线在平面上投影方程的多种解法
- 计算机视觉文献综述选题,综述论文2021-计算机视觉十大领域最新综述文章分类大盘点...
- 自锁时间电路plc_自锁与互锁电路的plc梯形图程序【图】
- python字典相乘_python集合、元组、字典
- Apache启动失败,请检查相关配置。√MySQL5.1已启动。
- 2018年世界计算机超算大赛,2018ASC世界大学生超算竞赛开赛:11队齐破赛会纪录...