Java--通过JDBC元数据获取表结构(ResultSetMetaData元数据的使用)
最近在线上联调,由于我们没有数据库的可视化工具,和其他公司比对数据和表结构总是十分麻烦。后来我看到组长通过元数据来获取表结构和值。之后我自学了一下,感觉十分方便,分享给大家。
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元数据的使用)相关推荐
- 【PostgreSQL】PG读取元数据获取表结构及字段类型信息(过程拆解及其他应用场景)...
〇.参考链接 一.代码 selectc.relname 表名,cast (obj_description (relfilenode, 'pg_class') as varchar) 名称,d.desc ...
- MySql 、Oracle 获取表结构和字段信息
MySql获取表结构信息 SELECTTABLE_NAME,TABLE_COMMENT FROMinformation_schema.`TABLES` WHERETABLE_SCHEMA = 'dm' ...
- 【MySQL】如何使用SQL语句获取表结构和获取全部表名
目录 一.业务背景 二.如何获取全部表名 三.如何获取表结构 四.总结 一.业务背景 在实际的业务需求中,我们经常需要拿到数据库的全部表名,展示在后台中或者输出到文件里. 具体到业务中的需求比如: 导 ...
- C++MYSQL:获取表结构:MYSQL_FEILD
这里给出获取表的结构的API.把表的字段描述作为列的形式,动态地显示. 在前面的mysql的连接中,提到一个参数是是否返回表的结构信息.可以通过mysql_options来关闭.使用的关键字为: MY ...
- SQL SERVER 获取表结构信息《转载》
获取表信息 SELECT 表名 = case when a.colorder=1 then d.name else '' end, 表说明 = case whe ...
- SQL语句获取表结构
目录 语句 演示 语句 获取表的结构数据,如表名,数据类型,精度等数据,代码如下: SELECT t.table_name, -- 表名c.column_name, -- 字段名c.data_type ...
- 【greenplum】 获取表结构,实现类似mysql show create table 功能
转载于:http://www.cnblogs.com/gomysql/p/6007013.html 大家都知道在MySQL里面是非常easy的,show create table table_name ...
- sql2008 获取表结构说明
SELECT 表名 = case when a.colorder=1 then d.name else '' end, 表说明 = case when a.colo ...
- Sql Server 2005 获取表结构信息
SELECT 表名 = CASE a.colorder WHEN 1 THEN c.name ELSE '' END, 序 = a.colorder, 字段名 ...
最新文章
- vue-router的基本使用
- kafka配置公网IP访问
- 批量PDF转换成Office文件 PDF转换器下载
- 【图文详解】JAVA中的转义字符
- Unity3D_NGUI_安卓APK安装包瘦身实践
- Enumerable 下又有新的扩展方法啦,快来一睹为快吧
- C语言——数组、函数、指针
- 视觉SLAM十四讲学习笔记-第七讲-视觉里程计-特征点法和特征提取和匹配实践
- oracle 控制文件 scn,重建控制文件后, 控制文件中的数据文件检查点SCN来自哪里...
- 输出毫秒_使用AMETEK直流电源实现波形变化的输出
- 数字化落后,工业就挨打!
- html 如何引入一个公共的头部和底部
- 网上商城项目总结报告
- 遗传算法c语言程序二次方程,遗传算法的c语言程序.doc
- 学习攻略 | Python数据挖掘学习路线图
- 登录会员管理系统java_huiyuan 会员管理,一款基于java web 的 软件,可以实现登录、注册、充值功能。 Jsp/Servlet 262万源代码下载- www.pudn.com...
- 介绍ImageOptim图片处理软件
- Ubuntu 无法复制大文件 卡死
- 网络安全界巨擘 王江民
- 如何下载微信公众号中的音频、视频文件?