一、整体代码

1、method1:执行select语句获取,select * from dims where 1 = 2

2、method2:执行show create table获取,show create table dims

3、method3:从jdbc数据库连接获取

import lombok.extern.slf4j.Slf4j;

import java.sql.*;
import java.util.Properties; /**
* 从jdbc中获取数据库表字段信息(包含字段名称、字段类型、字段注释、字段长度等)
*/
@Slf4j
public class test {
private static Connection connection; public static void main(String[] args) {
test test = new test();
// 第一种方式:执行sql语句获取 select * from dims where 1 = 2
test.method1();
// 第二种方式:执行sql语句获取 show create table dims
test.method2();
// 第三种方式:直接从jdbc数据库连接Connection实例中获取
test.method3();
} private void method1() {
try{
PreparedStatement preparedStatement = connection.prepareStatement("select * from dims where 1 = 2");
ResultSetMetaData resultSetMetaData = preparedStatement.executeQuery().getMetaData();
for (int i = 0; i < resultSetMetaData.getColumnCount(); i++) {
log.info("实例名:{}", resultSetMetaData.getCatalogName(i + 1));
log.info("表名:{}", resultSetMetaData.getTableName(i + 1));
log.info("类型:{}", resultSetMetaData.getColumnClassName(i + 1));
log.info("列类型:{}", resultSetMetaData.getColumnTypeName(i + 1));
log.info("字段名称:{}", resultSetMetaData.getColumnName(i + 1));
log.info("字段长度:{}", resultSetMetaData.getColumnDisplaySize(i + 1));
log.info("getColumnType:{}", resultSetMetaData.getColumnType(i + 1));
log.info("getPrecision:{}", resultSetMetaData.getPrecision(i + 1));
log.info("getScale:{}", resultSetMetaData.getScale(i + 1));
log.info("getSchemaName:{}", resultSetMetaData.getSchemaName(i + 1));
log.info("getScale:{}", resultSetMetaData.getScale(i + 1));
}
} catch (Exception e) {
log.error("method1 error ", e);
}
} private void method2() {
try{
PreparedStatement preparedStatement2 = connection.prepareStatement("show create table dims");
ResultSet resultSet2 = preparedStatement2.executeQuery();
while(resultSet2.next()) {
String tableName = resultSet2.getString("Table");
String createTable = resultSet2.getString("Create Table");
log.info("tableName:{}", tableName);
log.info("createTable:");
System.out.println(createTable);
}
} catch (Exception e) {
log.error("method2 error ", e);
}
} private void method3() {
try{
DatabaseMetaData databaseMetaData = connection.getMetaData();
// 获取所有表
ResultSet resultSet = databaseMetaData.getTables(null, null, null, new String[]{"TABLE"});
// 获取指定表
ResultSet specificResultSet = databaseMetaData.getColumns(null, "%", "dims", "%");
String columnName2;
String columnType2;
String comment2;
while(specificResultSet.next()) {
columnName2 = specificResultSet.getString("COLUMN_NAME");
columnType2 = specificResultSet.getString("TYPE_NAME");
comment2 = specificResultSet.getString("REMARKS");
log.info("COLUMN_NAME:{}", columnName2);
log.info("TYPE_NAME:{}", columnType2);
log.info("REMARKS:{}", comment2);
}
} catch (Exception e) {
log.error("method3 error ", e);
}
} static {
try{
Properties info = new Properties(); // 定义Properties对象
info.setProperty("user", "user"); // 设置Properties对象属性
info.setProperty("password", "123456");
Class.forName("com.mysql.cj.jdbc.Driver"); // 注册数据库驱动
String url = "jdbc:mysql://127.0.0.1:3306/databases"; // briup为数据库名称
connection = DriverManager.getConnection(url, info); // 获取连接数据库的Connection对象
} catch (Exception e) {
log.error("autoCodeGeneratorProcess error ", e);
}
}
}

三种方式从jdbc中获取数据库表字段信息的更多相关文章

  1. JavaScript 基础——使用js的三种方式,js中的变量,js中的输出语句,js中的运算符;js中的分支结构

    JavaScript 1.是什么:基于浏览器 基于(面向)对象 事件驱动 脚本语言 2.作用:表单验证,减轻服务器压力 添加野面动画效果 动态更改页面内容 Ajax网络请求 () 3.组成部分:ECM ...

  2. mysql数据库插入数据获取自增主键的三种方式(jdbc PreparedStatement方式、mybatis useGeneratedKeys方式、mybatis selectKey方式)

    通常来说对于mysql数据库插入数据获取主键的方法是采用selectKey的方式,特别是当你持久层使用mybatis框架的时候. 本文除此之外介绍其它两种获取主键的方式. 为了方便描述我们先建一张my ...

  3. 使用JDBC connect获取数据库表结构信息

    1.这是生成代码的关键 引入maven依赖 <dependency> <groupId>mysql</groupId> <artifactId>mysq ...

  4. 【转】三种方式在C++中调用matlab

      C/C++调用Matlab 在工程实践中,C/C++调用Matlab 的方法主要有调用Matlab 计算引擎.包含m 文件转 换的C/C++文件,以及调用m文件生成的DLL 文件. 1 利用Mat ...

  5. Python基础之格式化输出的三种方式

    目录 1. 格式化输出的三种方式 1.1 占位符 1.2 format格式化 1.3 f-string格式化 1. 格式化输出的三种方式 在程序中,需要将输出信息打印成固定的格式,这时候就需要格式化输 ...

  6. WPF中实现PropertyGrid(用于展示对象的详细信息)的三种方式

    原文:WPF中实现PropertyGrid(用于展示对象的详细信息)的三种方式 由于WPF中没有提供PropertyGrid控件,有些业务需要此类的控件.这篇文章介绍在WPF中实现PropertyGr ...

  7. 【spring Boot】spring boot获取资源文件的三种方式【两种情况下】

    首先声明一点,springboot获取资源文件,需要看是 1>从spring boot默认的application.properties资源文件中获取 2>还是从自定义的资源文件中获取 带 ...

  8. 反射概述-获取字节码Class对象的三种方式

    反射概述 判定结果∶*红色:失败*绿色:成功*一般我们会使用断言操作来处理结果*Assert.assertEquals(期望的结果,运算的结果);补充∶*Before:*修饰的方法会在测试方法之前被自 ...

  9. 转 Velocity中加载vm文件的三种方式

    Velocity中加载vm文件的三种方式   velocitypropertiespath Velocity中加载vm文件的三种方式:    方式一:加载classpath目录下的vm文件 Prope ...

  10. Oracle字符串行拆分成列的三种方式

    Oracle字符串行拆分成列的三种方式 --muphy 开发过程中经常会遇到将前台多个值用逗号连接一同传递到后台查询,这个用逗号连接的字符串分隔的每个字符串分别对应Oracle数据库表的不同行. 如下 ...

随机推荐

  1. k8s之Helm

    官方文档: https://helm.sh/zh/docs/intro/using_helm/ Helm 帮助您管理 Kubernetes 应用-- Helm Chart,Helm 是查找.分享和使用 ...

  2. XJTUPC2023

    J. 大秦酒店欢迎您 题解 我们考虑莫队 首先我们预处理出处于位置\(x\)的颜色下一次出现的位置\(nxt[x]\)以及上一次出现的位置\(pre[x]\) 莫队上维护一下信息: \(Ans\):\ ...

  3. Git clone报错“Connection was reset, errno 10054”

    前情 最近在使用一个UI库的时候,发现其中一个BUG,于是想尝试提一个PR. 坑位 我平时习惯用https的方式拉取代码,发现在clone代码的时候一直失败,错误提示:OpenSSL SSL_read ...

  4. opencv imshow 大图片显示,拖动显示

    用imshow显示大图片,不能完整显示,不方便.结合网友的代码,修改成现在的代码,可以拖动图片,方便查看完整图片.而且方便调试,只需要用MatShow替换imshow. struct MousePar ...

  5. Flutter 错误The argument type 'Color' can't be assigned to the parameter type 'MaterialStateProperty<Color?>?'.dart(argument_type_not_assignable)

    MaterialStateProperty<Color?>?和Color 当为TextButton等button添加颜色时,使用ButtonStyle为其添加颜色 TextButton( ...

  6. 基于 MediatR 和 FluentValidation 的 CQRS 验证管线

    基于 MediatR 和 FluentValidation 的 CQRS 验证管线 CQRS Validation Pipeline with MediatR and FluentValidation ...

  7. Xshell无法连接22端口问题解决办法汇总

    Xshell软件在进行远程连接过程中,会出现端口连接报错的问题,提示:"该IP地址的22端口连接失败",这是怎么回事?今天小编就xshell软件无法连接22端口的问题,整理相关情形 ...

  8. 加入security+jwt安全策略

    Pom中引入 <!-- security --> <dependency> <groupId>org.springframework.boot</groupI ...

  9. 测试覆盖率 Java 覆盖率 Jacoco 插桩的不同形式总结和踩坑记录

    https://testerhome.com/topics/20632 关于Jacoco的小结和踩坑记录 一.概述 测试覆盖率,老生常谈的话题.因为我测试理论基础不是很好,就不提什么需求覆盖率啦这样那 ...

  10. Qt开发经验小技巧156-160

    Qt的UI界面在resize以后有个BUG,悬停样式没有取消掉,需要主动模拟鼠标动一下. void frmMain::on_btnMenu_Max_clicked() { ...... //最大化以后 ...