Java获取数据库表结构
Java能够操作数据库,当然能够获取到数据库的表结构。
虽然各个DB厂商查询数据库表结构的语句不同,但是Java中通过封装,可以使用共同的API来获取。
各个具体的DB厂商有各自的实现,只需导入相应的包即可。
代码
废话不多说,直接看代码。
public static void main(String[] args) throws Exception {String driver = "com.mysql.cj.jdbc.Driver";String url = "jdbc:mysql://localhost:3306/book_sc?serverTimezone=GMT";String user = "root";String password = "root";printTableStructure(driver, url, user, password);
}/*** 打印所有表结构** @param driver driver* @param url url* @param user user* @param password password* @throws Exception exception*/
private static void printTableStructure(String driver, String url, String user, String password) throws Exception {Class.forName(driver);Connection connection = DriverManager.getConnection(url, user, password);DatabaseMetaData metaData = connection.getMetaData();// 获取所有表ResultSet tableResultSet = metaData.getTables(null, null, "order%", new String[]{"TABLE"});while (tableResultSet.next()) {String tableName = tableResultSet.getString("TABLE_NAME");System.out.println("table:" + tableName);// 获取表字段结构ResultSet columnResultSet = metaData.getColumns(null, "%", tableName, "%");while (columnResultSet.next()) {// 字段名称String columnName = columnResultSet.getString("COLUMN_NAME");// 数据类型String columnType = columnResultSet.getString("TYPE_NAME");// 字段长度int datasize = columnResultSet.getInt("COLUMN_SIZE");// 小数部分位数int digits = columnResultSet.getInt("DECIMAL_DIGITS");// 是否可为空 1代表可空 0代表不可为空int nullable = columnResultSet.getInt("NULLABLE");// 描述String remarks = columnResultSet.getString("REMARKS");System.out.println(columnName + " " + columnType + " " + datasize + " " + digits + " " + nullable + " " + remarks);}System.out.println("=================================");}
}
说明
DatabaseMetaData的getTable方法可以获取表信息,代码中获取的是 order开头的所有表,打印表名。
其中关于表,可以获得如下信息:
- TABLE_CAT String => 表类别(可为 null)
- TABLE_SCHEM String => 表模式(可为 null)
- TABLE_NAME String => 表名称
- TABLE_TYPE String => 表类型。典型的类型是 “TABLE”、“VIEW”、“SYSTEM TABLE”、“GLOBAL TEMPORARY”、“LOCAL TEMPORARY”、“ALIAS” 和 “SYNONYM”。
- REMARKS String => 表的解释性注释
- TYPE_CAT String => 类型的类别(可为 null)
- TYPE_SCHEM String => 类型模式(可为 null)
- TYPE_NAME String => 类型名称(可为 null)
- SELF_REFERENCING_COL_NAME String => 有类型表的指定 “identifier” 列的名称(可为 null)
- REF_GENERATION String => 指定在 SELF_REFERENCING_COL_NAME 中创建值的方式。这些值为 “SYSTEM”、“USER” 和 “DERIVED”。(可能为 null)
DatabaseMetaData的getColumns方法可以获取表字段信息,代码中分别获取其名称、类型、长度等信息。
其中关于字段,可以获得如下信息:
- TABLE_CAT String => 表类别(可为 null)
- TABLE_SCHEM String => 表模式(可为 null)
- TABLE_NAME String => 表名称
- COLUMN_NAME String => 列名称
- DATA_TYPE int => 来自 java.sql.Types 的 SQL 类型
- TYPE_NAME String => 数据源依赖的类型名称,对于 UDT,该类型名称是完全限定的
- COLUMN_SIZE int => 列的大小。
- BUFFER_LENGTH 未被使用。
- DECIMAL_DIGITS int => 小数部分的位数。对于 DECIMAL_DIGITS 不适用的数据类型,则返回 Null。
- NUM_PREC_RADIX int => 基数(通常为 10 或 2)
- NULLABLE int => 是否允许使用 NULL。
- columnNoNulls - 可能不允许使用 NULL 值
- columnNullable - 明确允许使用 NULL 值
- columnNullableUnknown - 不知道是否可使用 null
- REMARKS String => 描述列的注释(可为 null)
- COLUMN_DEF String => 该列的默认值,当值在单引号内时应被解释为一个字符串(可为 null)
- SQL_DATA_TYPE int => 未使用
- SQL_DATETIME_SUB int => 未使用
- CHAR_OCTET_LENGTH int => 对于 char 类型,该长度是列中的最大字节数
- ORDINAL_POSITION int => 表中的列的索引(从 1 开始)
- IS_NULLABLE String => ISO 规则用于确定列是否包括 null。
- YES — 如果参数可以包括 NULL
- NO — 如果参数不可以包括 NULL
- 空字符串 — 如果不知道参数是否可以包括 null
- SCOPE_CATLOG String => 表的类别,它是引用属性的作用域(如果 DATA_TYPE 不是 REF,则为 null)
- SCOPE_SCHEMA String => 表的模式,它是引用属性的作用域(如果 DATA_TYPE 不是 REF,则为 null)
- SCOPE_TABLE String => 表名称,它是引用属性的作用域(如果 DATA_TYPE 不是 REF,则为 null)
- SOURCE_DATA_TYPE short => 不同类型或用户生成 Ref 类型、来自 java.sql.Types 的 SQL 类型的源类型(如果 DATA_TYPE 不是 DISTINCT 或用户生成的 REF,则为 null)
- IS_AUTOINCREMENT String => 指示此列是否自动增加
- YES — 如果该列自动增加
- NO — 如果该列不自动增加
- 空字符串 — 如果不能确定该列是否是自动增加参数
- COLUMN_SIZE 列表示给定列的指定列大小。对于数值数据,这是最大精度。对于字符数据,这是字符长度。对于日期时间数据类型,这是 String 表示形式的字符长度(假定允许的最大小数秒组件的精度)。对于二进制数据,这是字节长度。对于 ROWID 数据类型,这是字节长度。对于列大小不适用的数据类型,则返回 Null。
关于上述两个方法的入参,参考如下说明:
- catalog - 类别名称;它必须与存储在数据库中的类别名称匹配;该参数为 “” 表示获取没有类别的那些描述;为 null 则表示该类别名称不应该用于缩小搜索范围
- schemaPattern - 模式名称的模式;它必须与存储在数据库中的模式名称匹配;该参数为 “” 表示获取没有模式的那些描述;为 null 则表示该模式名称不应该用于缩小搜索范围
- tableNamePattern - 表名称模式;它必须与存储在数据库中的表名称匹配
- columnNamePattern - 列名称模式;它必须与存储在数据库中的列名称匹配
Java获取数据库表结构相关推荐
- Java获取数据库表的字段信息,及如何将ResultSet转为json
为什么80%的码农都做不了架构师?>>> 一.Java获取数据库表的各个字段的相关信息 在某些开发情景中,需要获取数据库中表的各个字段的相关信息,如字段名,字段类型,字段大小等 ...
- mysql 一键获取数据库表结构
作用: 1.获取当前数据库所有的表信息 2.获取当前表结构信息 查询数据库中的表: -- 查询数据库中的表 SELECT * FROM information_schema.`TABLES` wher ...
- Java获取数据库表名、字段名、字段类型及注释等信息
以前有小伙伴在公众号留言问过如何通过java获取数据库的所有表.及表里字段的信息,只是私信回复过. 在最近的项目中架构部提出了一个数据源的配置需求,就是需要配置公司所有系统的数据库.表等信息,便于大数 ...
- Java实现数据库表结构导出到Excel
2019独角兽企业重金招聘Python工程师标准>>> 本人自己写的一个工具,界面化,稍微配置即可数据库中的表的结构导出到Excel. 源码地址数据库表结构导出到Excel一键式工具 ...
- java 获取oracle表结构_Java导出oracle表结构实例详解
Java导出oracle表结构实例详解 发布于 2020-7-20| 复制链接 摘记: Java导出oracle表结构实例详解最近用到的,因为plsql是收费的,不让用,找了很多方法终于发现了这个. ...
- java修改数据库表结构_数据库设计(一):设计传统系统表结构(Java开发)
以下文章来源于微信公众号 程序编程之旅 ,作者陈浩翔 此处仅供本人学习记录之用,侵删 本篇为第一篇.讲解传统系统的表结构设计(Java开发). 讲讲如何避免数据库设计的一些坑,方便后期的开发与维护. ...
- java获取mysql表结构
获取表结构与字段信息: package com.mysql; import java.sql.Connection; import java.sql.DatabaseMetaData; import ...
- java 获取oracle表结构_获取Oracle中所有表的列表?
回答(19) 2 years ago 我们可以从以下查询获取所有表格,包括列详细信息: SELECT * FROM user_tab_columns; 2 years ago 使用sqlplus更好地 ...
- 通过java查询数据库表结构
public static void getConnAndTableStruct() {Connection connection = null;PreparedStatement pstmt = n ...
最新文章
- linux debian ntp,Debian下面的ntp服务(ntpdate)的安装
- 敲诈英伟达的竟然是一群未成年???
- docker部署nginx并且挂载文件夹和文件
- navicat premium 链接postgresql 无法加载表_POSTGRESQL 数据库结构体系 ||| 东来西去 三个角度看...
- Excel 2007 的重大bug
- Entity Framework 6 Recipes 2nd Edition(10-3)译 - 返回结果是一个标量值
- NAR | 陈加余/陈亮合作建立R-loop全基因组分布与调控的专家数据库
- xshell连接kali时vim无法粘贴解决方法
- Eclipse的Ctrl+Shift+R中过滤文件类型
- vlan绑定_【实操】多VLAN间通信
- java面试题:数组的常用算法实现
- mysql局域网搭建_局域网中搭建共享MySQL数据库
- 软考软件设计师下午真题-面向对象的程序设计与实现-享元设计模式(2021年下半年试题六))Java代码讲解
- FlashFXP v4.4.2.2019 绿色版
- swagger ui 怎么输入对象_java swagger ui 添加header请求头参数的方法
- python+pyecharts画地图
- VBA基础函数:取数组最大下标——UBound函数
- 2016年中考计算机考试模拟试题,2016年计算机三级考试模拟试题(含答案)
- 可以计算亲戚关系的超级计算器!
- 调用librosa.load() 显示audioread.NoBackendError