最近在线上联调,由于我们没有数据库的可视化工具,和其他公司比对数据和表结构总是十分麻烦。后来我看到组长通过元数据来获取表结构和值。之后我自学了一下,感觉十分方便,分享给大家。

jdbc的元数据有两类。一个是DatabaseMetaData,一个是ResultSetMetaData。

DatabaseMetaData是描述数据库的元数据对象。

ResultSetMetaData是描述结果集的元数据对象。

1.首先我们通过ResultSetMetaData获取表的结构,每个字段的类型,是否可为空值等。

2.通过ResultSetMetaData还可以直接拿到每条数据中所有的值而不需要指定每一列的类型,直接获取到所有列的个数,然后利用rs.getObject(int index)即可。

public class JdbcTest {public static void main(String[] args) {try {// 以神通数据库为例,使用其他库直接修改下面两行即可Class.forName("com.oscar.Driver");Connection conn = DriverManager.getConnection("jdbc:oscar://192.168.0.19/PZDB?user=TEST_USR&password=TEST_USR&characterEncoding=UTF-8");String sql = "select * from T_TEST_CONFIG_TASK limit 10";PreparedStatement ps = conn.prepareStatement(sql);ResultSet rs = ps.executeQuery();// 获取表的元数据(通过ResultSetMetaData我们可以拿到该表的表结构,每个字段的类型,是否可为空值等)DatabaseMetaData metaData = conn.getMetaData();ResultSetMetaData rsm = ps.getMetaData();for (int i = 1; i < rsm.getColumnCount(); i++) {System.out.println("\t列名" + rsm.getColumnLabel(i) + "\t列类型:" + psm.getColumnTypeName(i) + "\t是否可为null:"+ rsm.isNullable(i));}System.out.println("======================================");// 获取执行结果元数据(可以在不知道列名的情况下,盲取该表的所有数据)while (rs.next()) {for (int i = 1; i < rsm.getColumnCount(); i++) {System.out.println("列名:" + rsm.getColumnLabel(i) + "\t列值:" + rs.getObject(i));}}} catch (Exception e) {e.printStackTrace();}}}

最后列举一些常用的方法:

1.DatabaseMetaData的常用方法摘要:

ResultSet getTables(String catalog,String schemaPattern,String tableNamePattern,String[] types);   //获取表信息
ResultSet getPrimaryKeys(String catalog,String schema,String table);  //获取表主键信息
ResultSet getIndexInfo(String catalog,String schema,String table,boolean unique,boolean approximate);  //获取表索引信息
ResultSet getColumns(String catalog,String schemaPattern,String tableNamePattern,String columnNamePattern); //获取表列信息

2.ResultSetMetaData的常用方法摘要:

String getCatalogName(int column) //获取指定列的表目录名称。
String getColumnClassName(int column) 如果调用方法 ResultSet.getObject //从列中检索值,则返回构造其实例的 Java 类的完全限定名称。
int getColumnCount() 返回此 ResultSet //对象中的列数。
int getColumnDisplaySize(int column) //指示指定列的最大标准宽度,以字符为单位。
String getColumnLabel(int column) //获取用于打印输出和显示的指定列的建议标题。
String getColumnName(int column) //获取指定列的名称。
int getColumnType(int column) //检索指定列的 SQL 类型。
String getColumnTypeName(int column) //检索指定列的数据库特定的类型名称。
int getPrecision(int column) //获取指定列的小数位数。
int getScale(int column) //获取指定列的小数点右边的位数。
String getSchemaName(int column) //获取指定列的表模式。
String getTableName(int column) //获取指定列的名称。
boolean isAutoIncrement(int column) //指示是否自动为指定列进行编号,这样这些列仍然是只读的。
boolean isCaseSensitive(int column) //指示列的大小写是否有关系。
boolean isCurrency(int column) //指示指定的列是否是一个哈希代码值。
boolean isDefinitelyWritable(int column) //指示在指定的列上进行写操作是否明确可以获得成功。
int isNullable(int column) //指示指定列中的值是否可以为 null。
boolean isReadOnly(int column) //指示指定的列是否明确不可写入。
boolean isSearchable(int column) //指示是否可以在 where 子句中使用指定的列。
boolean isSigned(int column) //指示指定列中的值是否带正负号。
boolean isWritable(int column) //指示在指定的列上进行写操作是否可以获得成功。

参考文章:

https://blog.csdn.net/lijizh1013/article/details/8230545

https://blog.csdn.net/chance2015/article/details/50420442

喜欢的朋友点个赞哦~~

Java--通过JDBC元数据获取表结构(ResultSetMetaData元数据的使用)相关推荐

  1. 【PostgreSQL】PG读取元数据获取表结构及字段类型信息(过程拆解及其他应用场景)...

    〇.参考链接 一.代码 selectc.relname 表名,cast (obj_description (relfilenode, 'pg_class') as varchar) 名称,d.desc ...

  2. MySql 、Oracle 获取表结构和字段信息

    MySql获取表结构信息 SELECTTABLE_NAME,TABLE_COMMENT FROMinformation_schema.`TABLES` WHERETABLE_SCHEMA = 'dm' ...

  3. 【MySQL】如何使用SQL语句获取表结构和获取全部表名

    目录 一.业务背景 二.如何获取全部表名 三.如何获取表结构 四.总结 一.业务背景 在实际的业务需求中,我们经常需要拿到数据库的全部表名,展示在后台中或者输出到文件里. 具体到业务中的需求比如: 导 ...

  4. C++MYSQL:获取表结构:MYSQL_FEILD

    这里给出获取表的结构的API.把表的字段描述作为列的形式,动态地显示. 在前面的mysql的连接中,提到一个参数是是否返回表的结构信息.可以通过mysql_options来关闭.使用的关键字为: MY ...

  5. SQL SERVER 获取表结构信息《转载》

    获取表信息 SELECT      表名       = case when a.colorder=1 then d.name else '' end,      表说明     = case whe ...

  6. SQL语句获取表结构

    目录 语句 演示 语句 获取表的结构数据,如表名,数据类型,精度等数据,代码如下: SELECT t.table_name, -- 表名c.column_name, -- 字段名c.data_type ...

  7. 【greenplum】 获取表结构,实现类似mysql show create table 功能

    转载于:http://www.cnblogs.com/gomysql/p/6007013.html 大家都知道在MySQL里面是非常easy的,show create table table_name ...

  8. sql2008 获取表结构说明

    SELECT     表名       = case when a.colorder=1 then d.name else '' end,     表说明     = case when a.colo ...

  9. Sql Server 2005 获取表结构信息

    SELECT 表名   = CASE a.colorder WHEN 1 THEN c.name ELSE '' END,        序     = a.colorder,        字段名 ...

最新文章

  1. vue-router的基本使用
  2. kafka配置公网IP访问
  3. 批量PDF转换成Office文件 PDF转换器下载
  4. 【图文详解】JAVA中的转义字符
  5. Unity3D_NGUI_安卓APK安装包瘦身实践
  6. Enumerable 下又有新的扩展方法啦,快来一睹为快吧
  7. C语言——数组、函数、指针
  8. 视觉SLAM十四讲学习笔记-第七讲-视觉里程计-特征点法和特征提取和匹配实践
  9. oracle 控制文件 scn,重建控制文件后, 控制文件中的数据文件检查点SCN来自哪里...
  10. 输出毫秒_使用AMETEK直流电源实现波形变化的输出
  11. 数字化落后,工业就挨打!
  12. html 如何引入一个公共的头部和底部
  13. 网上商城项目总结报告
  14. 遗传算法c语言程序二次方程,遗传算法的c语言程序.doc
  15. 学习攻略 | Python数据挖掘学习路线图
  16. 登录会员管理系统java_huiyuan 会员管理,一款基于java web 的 软件,可以实现登录、注册、充值功能。 Jsp/Servlet 262万源代码下载- www.pudn.com...
  17. 介绍ImageOptim图片处理软件
  18. Ubuntu 无法复制大文件 卡死
  19. 网络安全界巨擘 王江民
  20. 如何下载微信公众号中的音频、视频文件?

热门文章

  1. 如何编写一个智能家居app
  2. 第四范式下的科教研:算力困局怎么解?
  3. 火车头发布本地html,火车头采集器批量导入本地大量的txt文本文章 直接发布
  4. ZED2相机+NVIDIA NX使用及检测目标功能1
  5. 双目立体视觉(4)- ZED2双目视觉开发理论与实践 with examples 0.1 object detection
  6. excel手机版_换手机便签不能同步到新手机上怎么办?
  7. 使火狐浏览器默认在新的标签页打开链接
  8. 关于NUKE使用黑白图作为遮罩
  9. 物联网技术概论:第4章
  10. ctfshow phps源码泄露