三种方式从jdbc中获取数据库表字段信息
一、整体代码
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中获取数据库表字段信息的更多相关文章
- JavaScript 基础——使用js的三种方式,js中的变量,js中的输出语句,js中的运算符;js中的分支结构
JavaScript 1.是什么:基于浏览器 基于(面向)对象 事件驱动 脚本语言 2.作用:表单验证,减轻服务器压力 添加野面动画效果 动态更改页面内容 Ajax网络请求 () 3.组成部分:ECM ...
- mysql数据库插入数据获取自增主键的三种方式(jdbc PreparedStatement方式、mybatis useGeneratedKeys方式、mybatis selectKey方式)
通常来说对于mysql数据库插入数据获取主键的方法是采用selectKey的方式,特别是当你持久层使用mybatis框架的时候. 本文除此之外介绍其它两种获取主键的方式. 为了方便描述我们先建一张my ...
- 使用JDBC connect获取数据库表结构信息
1.这是生成代码的关键 引入maven依赖 <dependency> <groupId>mysql</groupId> <artifactId>mysq ...
- 【转】三种方式在C++中调用matlab
C/C++调用Matlab 在工程实践中,C/C++调用Matlab 的方法主要有调用Matlab 计算引擎.包含m 文件转 换的C/C++文件,以及调用m文件生成的DLL 文件. 1 利用Mat ...
- Python基础之格式化输出的三种方式
目录 1. 格式化输出的三种方式 1.1 占位符 1.2 format格式化 1.3 f-string格式化 1. 格式化输出的三种方式 在程序中,需要将输出信息打印成固定的格式,这时候就需要格式化输 ...
- WPF中实现PropertyGrid(用于展示对象的详细信息)的三种方式
原文:WPF中实现PropertyGrid(用于展示对象的详细信息)的三种方式 由于WPF中没有提供PropertyGrid控件,有些业务需要此类的控件.这篇文章介绍在WPF中实现PropertyGr ...
- 【spring Boot】spring boot获取资源文件的三种方式【两种情况下】
首先声明一点,springboot获取资源文件,需要看是 1>从spring boot默认的application.properties资源文件中获取 2>还是从自定义的资源文件中获取 带 ...
- 反射概述-获取字节码Class对象的三种方式
反射概述 判定结果∶*红色:失败*绿色:成功*一般我们会使用断言操作来处理结果*Assert.assertEquals(期望的结果,运算的结果);补充∶*Before:*修饰的方法会在测试方法之前被自 ...
- 转 Velocity中加载vm文件的三种方式
Velocity中加载vm文件的三种方式 velocitypropertiespath Velocity中加载vm文件的三种方式: 方式一:加载classpath目录下的vm文件 Prope ...
- Oracle字符串行拆分成列的三种方式
Oracle字符串行拆分成列的三种方式 --muphy 开发过程中经常会遇到将前台多个值用逗号连接一同传递到后台查询,这个用逗号连接的字符串分隔的每个字符串分别对应Oracle数据库表的不同行. 如下 ...
随机推荐
- JavaWeb 入门到实战
注:看狂神说做的笔记 1.基本概念 1.1 前言 web开发: web:网页的意思,www.baidu.com,就是一个web页面 静态web: 不与数据库进行交互,静态显示网页数据(你刚学 html ...
- DevEco Studio 实战第一节:字符串拼接与组件构建
DevEco Studio 实战第一节:字符串拼接与组件构建 引言 在现代软件开发中,TypeScript 提供了强类型的优势,而 DevEco Studio 作为华为推出的开发集成环境,提供了便捷的 ...
- C#/.NET/.NET Core技术前沿周刊 | 第 15 期(2024年11.25-11.30)
前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录.追踪C#/.NET/.NET Core领域.生态的每周最新.最实用.最有价值的技术文章.社区动态.优质项目和学习资源等. ...
- Vue.js axios
1.安装与引入 Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中,官方文档 在HTML文件中引入 <script src="https:/ ...
- ChatGPT接口测试用例生成的流程
通常,使用ChatGPT生成接口测试用例的流程可以分为以下关键步骤. 收集接口信息 收集接口的相关文档和信息,如接口名称.请求方法.请求参数.返回结果等.这些是ChatGPT生成测试用例需要的输入信息 ...
- Could not retrieve transation read-only status server 的解决办法
问题描述: 在项目开发的过程中,使用Hibernate的ORM进行建表时,出现 " Could not retrieve transation read-only status server ...
- re模块:核心函数和方法
1.compile(pattren,flages=0) 使用任何可选的标记来编译正则表达式的模式然后返回一个正则表达式对象 2.match(pattern,string,flags=0) 尝 ...
- 关于Qt中的qss样式表需要注意的坑
关于QSS要注意的坑. qss源自css,相当于css的一个子集,主要支持的是css2标准,很多网上的css3的标准的写法在qss这里是不生效的,所以不要大惊小怪. qss也不是完全支持所有的css2 ...
- Qt编写安防视频监控系统25-离线地图
一.前言 离线地图这个功能是近期才完成的,老早以前就很多人问有没有离线地图的功能,之前也大致了解过如何做离线地图,其实最核心的不是代码,而是如何搞到免费的离线地图文件,离线地图下载器网上大部分都是收费 ...
- Qt开源作品18-无边框背景透明窗体
一.前言 用Qt来做无边框北京透明窗体非常简单,根本不需要用什么系统层的API来实现透明什么的,Qt本身提供了很多种设置窗体透明的方法,除了可以设置窗体的属性为透明以外,还可以设置透明度函数,以及qs ...