Jdbc获取数据的字段信息

利用JDBC获取表信息和字段信息 最 阅读详情

一、创建ColumnInfo实体类。

        该类用来存放数据库对应某个字段的信息。

@Setter
@Getter
@AllArgsConstructor
@ToString
public class ColumnInfo {
	public static int GENERAL_KEY = 0;//普通键
	public static int PRIMARY_KEY = 1;//主键
	public static int FOREIGN_KEY = 2;//外键
	/**
	 * 字段的名字
	 */
	private String columnName;
	/**
	 *字段的数据类型
	 */
	private String typeName;
	/**
	 * 人为规定键的类型 0普通键,1主键,2外键
	 */
	private int keyType;

}
二、创建TableInfo实体类

      用来存表的相关信息。

@Setter
@Getter
@NoArgsConstructor
public class TableInfo {
	/**
	 * 对应数据库中的 表名
	 */
	private String tableName;
	/**
	 * 用一个map集合来存放表名的他的 字段信息
	 */
	private Map<String, ColumnInfo> columns = new HashMap<>();
	/**
	 * 唯一的主键,有且只有一个主键,不算联合主键
	 */
	private ColumnInfo uniquePrimaryKey;
	/**
	 * 所有的主键键信息,包括组合主键
	 */
	private List<ColumnInfo> primaryKeys = new ArrayList<>();
	/**
	 * 外键的名称的集合
	 */
	private List<ColumnInfo> importedKeys = new ArrayList<>();
	/**
	 * 外键表名的集合
	 */
	private List<String> fkTableName = new ArrayList<>();
}

三、数据库类型与java类型的转换

public class TypeConverter {
	//java对应java中的类型
	private static String javaType;

	/**
	 * 
	 * @param type       mySql中的数据类型
	 * @return           java中的类型
	 * @Description 描述:把传进来的mySql类型转换为java中的类型
	 */
	public static String mySqlType2JavaType(String mySqlType) {
		switch (mySqlType) {
		case "CHAR":
			javaType = "String";
			break;
		case "VARCHAR":
			javaType = "String";
			break;
		case "BLOB":
			javaType = "byte[]";
			break;
		case "TEXT":
			javaType = "String";
			break;
		case "INTEGER":
			javaType = "Integer";
			break;
		case "SMALLINT":
			javaType = "Integer";
			break;
		case "TINYINT":
			javaType = "Integer";
			break;
		case "MEDIUMINT":
			javaType = "Integer";
			break;
		case "BIT":
			javaType = "Boolean";
			break;
		case "BIGINT":
			javaType = "Long";
			break;
		case "FLOAT":
			javaType = "Float";
			break;
		case "DOUBLE":
			javaType = "Double";
			break;
		case "DECIMAL":
			javaType = "java.math.BigDecimal";
			break;
		case "DATE":
			javaType = "java.util.Date";
			break;
		case "TIME":
			javaType = "java.util.Time";
			break;
		case "DATETIME":
			javaType = "java.util.Date";
			break;
		case "TIMESTAMP":
			javaType = "java.util.Date";
			break;
		default:
			throw new RuntimeException("亲,你要转换的mysql类型[" + mySqlType + "]不存在!");
		}
		return javaType;
	}
}

四、创建TableUtil连接数据库读取信息

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;

public class TableUtil {
	/**
	 * 用来存放数据库中所有的表,key为数据库中的表名,value为表信息,全部封装到map集合中存放
	 */
	public static Map<String, TableInfo> tables = new HashMap<>();
	/**
	 * 将class对象和表信息对象关联起来,便于重用
	 */
	public static Map<Class, TableInfo> classTableMap = new HashMap<>();

	static {
		try {
			// 获取连接对象
			Connection conn = JDBCUtil.getConnection();
			// 获取数据库源信息
			DatabaseMetaData databaseMetaData = conn.getMetaData();
			// 获取所有表名的结果集
			ResultSet tableResult = databaseMetaData.getTables(null, "%", "%", new String[] { "TABLE" });
			while (tableResult.next()) {
				String tableName = (String) tableResult.getObject("TABLE_NAME");
				TableInfo tableInfo = new TableInfo();
				// 把创建的表放到一个map集合中去
				tables.put(tableName, tableInfo);
				// 根据表名查询所有数据库表中的所有字段的结果集
				ResultSet columns = databaseMetaData.getColumns(null, "%", tableName, "%");
				// 遍历获取所有字段信息封装到相应表中
				while (columns.next()) {
					// 构造一个字段,数据库中的字段应该包括字段名,字段类型,以及是否是主键、外键等因素
					ColumnInfo columnInfo = new ColumnInfo(columns.getString("COLUMN_NAME"),
							columns.getString("TYPE_NAME"), ColumnInfo.GENERAL_KEY);
					tableInfo.getColumns().put(columns.getString("COLUMN_NAME"), columnInfo);
				}

				// 对应表的所有主键集合,包括外键,组合主键
				ResultSet primaryKeysSet = databaseMetaData.getPrimaryKeys(null, "%", tableName);
				while (primaryKeysSet.next()) {
					// 从所有字段中取主键,添加到所有主键列
					ColumnInfo primaryKey = tableInfo.getColumns().get(primaryKeysSet.getObject("COLUMN_NAME"));
					// 我们规定类型主键的标志类型
					primaryKey.setKeyType(ColumnInfo.PRIMARY_KEY);
					// 把主键放到表信息的集合中去
					tableInfo.getPrimaryKeys().add(primaryKey);
				}
				// 若存在主键,则获取第一个作为主键,不考虑联合主键的情况
				if (tableInfo.getPrimaryKeys().size() > 0) {
					// 获取第一个主键
					tableInfo.setUniquePrimaryKey(tableInfo.getPrimaryKeys().get(0));
				}

				// 所有外键和外键表名的获取
				ResultSet importedKeysSet = databaseMetaData.getImportedKeys(null, "%", tableName);
				while (importedKeysSet.next()) {
					// 被导入的主键表名称也就是外键主表的表名
					String fkTableName = (String) importedKeysSet.getObject("PKTABLE_NAME");
					// 把外键表名添加到表信息中
					tableInfo.getFkTableName().add(fkTableName);
					// 从所有字段中取出外键
					ColumnInfo importedKey = tableInfo.getColumns().get(importedKeysSet.getObject("FKCOLUMN_NAME"));
					// 设置外键规定的标志类型
					importedKey.setKeyType(ColumnInfo.FOREIGN_KEY);
					// 把外键添加到表的外键集合中去
					tableInfo.getImportedKeys().add(importedKey);
				}
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}

五、测试方法

public class TestTableUtil {
	@Test
	public void testCreateTable() throws Exception {
		
		Map<String, TableInfo> tables = TableUtil.tables;
		
		TableInfo tableInfo = tables.get("student");
		Map<String, ColumnInfo> columns = tableInfo.getColumns();
		Collection<ColumnInfo> column = columns.values();
		
		System.out.println(column);
	}
}


六、附JdbcUtil获取连接对象代码

public class JDBCUtil {

	private static Connection connection = null;
	//配置文件的加载
	private static Properties p = null;
	
	static {
		try {

			p = new Properties();
			//获取类加载器
			ClassLoader loader = Thread.currentThread().getContextClassLoader();
			InputStream inputStream = loader.getResourceAsStream("db.properties");
			p.load(inputStream);
			//驱动类的加载
			Class.forName(p.getProperty("driverClassName"));
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public static Connection getConnection() {
		try {
			//连接对象的 获取
			connection = DriverManager.getConnection(p.getProperty("url"), p.getProperty("user"),
					p.getProperty("password"));
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return connection;
	}
}


如何从jdbc中获取数据库建表语句信息(表字段名称/表字段类型/表字段注释信息/表字段长度等等) * 如何从jdbc中获取数据库建表语句信息(表字段名称/表字段类型/表字段注释信息/表字段长度等等) * 1,表字段名称 * 2,表字段类型 * 3,表字段注释信息 这里介绍3种方式,如下: 第一种方式:执行sql语句获取 select * from user_pop_info where 1 = 2 第二种方式:执行sql语句获取 show create table user_pop_info 第二种方式:直接从jdbc数据库连接Connection实例中获取 三种方式获取的数据有一些区... 阅读详情

相关推荐

SQL提取数据库表名及字段名等信息代码示例

主要介绍了SQL提取数据库表名及字段名等信息的方法,文中向大家分享了实例代码,具有一定参考价值,需要的朋友可以了解下。

JDBC--连接数据库,查询数据库表中的记录

JDBC--连接数据库,查询数据库表中的记录

Ysuhang的博客 4696

2026最新 OpenClaw 手机端部署与实战:旧手机秒变 AI 智能终端(Android/iOS 双平台全覆盖)

OpenClaw 是2026年 GitHub 爆火的开源自托管 AI 执行网关,前身是 Clawdbot / Moltbot,主打“一句话让 AI 帮你完成真实操作”,核心能力包括发消息、整理文件、控制设备、自动化任务等,区别于普通对话式 AI,它能将 AI 指令转化为实际行动。无需高配置设备,无需专业技术,旧手机就能变身随身 AI 助手,既能实现自动化办公、生活便捷,又能保障数据隐私,还能体验极客玩法,这正是开源技术的魅力。# 初始化配置(按提示操作,配置 AI 模型 API Key)

wohaiweifaju的博客 5641

JDBC中,动态获取主键的方法及注意事项

文章目录前言一、方法1二、方法2二、注意事项 前言 我最近在学习JDBC的过程中,在java语句中获取主键方法,做了以下总结,以及一点小小的经验 一、方法1 Statement接口有一个方法:int executeUpdate(String sql, int autoGeneratedKeys) 使用方法:通过连接对象Connection调用 String sql - String类型的需要预编译的的SQL语句; autoGeneratedKeys - 指示自动生成的键是否可用于获取的标志。 a

wen11hao的博客 1051

SAP采购信息记录批量维护实战:用BAPI ME_INFORECORD_MAINTAIN搞定价格等级和条件记录

本文深入解析SAP标准BAPI ME_INFORECORD_MAINTAIN在采购信息记录批量维护中的应用,特别聚焦价格等级和条件记录的技术难点。通过实战案例和代码示例,帮助用户高效处理供应商-物料价格数据,提升供应链管理效率。

weixin_42522320的博客 410

使用freesurfer和3Dslicer进行脑区分割和电极定点(详细版)

1、安装好matlab和freesurfer2、在目标位置创建文件夹3、开放权限4、将需要计算的nii文件放入文件夹。

zQIANYUN的博客 5621

JDBC主键回显和主键值获取

JDBC主键回显和主键值获取

捉只树袋熊的博客 994

tcl脚本语言之file的常见用法

这些命令覆盖了从文件属性获取、修改、复制、删除、路径处理等广泛的文件操作需求。命令用于处理文件系统操作。

hzmscut的博客 5149

原生Jdbc获取库、表、字段

JDBC(Java Database Connectivity)是一个独立于特定数据库管理系统、通用的SQL数据库存取和操作的公共接口(一组API),定义了用来访问数据库的标准Java类库,()使用这些类库可以以一种标准的方法、方便地访问数据库资源。JDBC为访问不同的数据库提供了一种统一的途径,为开发者屏蔽了一些细节问题。JDBC的目标是使Java程序员使用JDBC可以连接任何提供了JDBC驱动程序。

lydms的博客 1万+

Autosar PNC网络管理配置-UserData的使用

之前配置的网络管理报文中的data都由ComM管理,后面客户新增了需求,最后两个byte需要发送,本文记录一下相关配置的修改能配置生成的,尽量不手码,毕竟手写一堆bug~

赞的博客 1903

RandLA-Net Tensorrt 推理 c++

RandLA-Net 实现 Tensorrt 部署.

J。 1108

jdbc元数据获得数据库中的表名、主键、外键以及字段信息

文章目录前言获取元数据获取表名获取主键获取外键获取字段 前言 学习了jdbc元数据的使用,觉得这能在一定程度上提高开发效率,就总结出来分享分享。 获取元数据 这里使用单元测试来演示,连接数据库的操作均在自己封装的工具类实现不在此处演示。为了便于理解,异常也都直接抛出不做处理。 获取表名 @Test public void testGetTable() throws SQLException{ ...

JiajunBernoulli的博客 6509

YOLOv11涨点改进 | 全网独家创新,注意力改进篇 | TGRS 2025 | 引入APCM自适应像素级协同机制,动态增强目标区域、抑制背景噪声,助力YOLOv11做红外小目标检测有效涨点

本文提出了一种基于APCM模块改进的YOLOv11网络模型,通过像素级局部-全局协同建模增强目标特征并抑制背景噪声。APCM模块采用轻量化设计,无需复杂参数,能有效提升小目标检测性能。文章详细介绍了APCM的原理、优势及其在红外小目标检测中的应用,包括模块结构、核心代码实现和YAML配置文件修改方法。实验结果表明,该方法在NUAA-SIRST和IRSTD-1K数据集上优于现有技术,显著提高了复杂场景下的检测精度与鲁棒性。

Ai缝合怪、助力小伙伴高效发论文 114

J2EE --- JDBC获取数据库元数据信息

字段信息             字段在表里就是一个Column,关于Column在JDBC里面有20多个参数来描述它,称为元数据,Metadata。包括: 1.                TABLE_CAT String => table catalog (may be null) 2.                TABLE_SCHEM String => ta

905

ADS基础教程16 - 存档和导入(workspace、cell、view)

选择workspace_Archive目录作为保存workspace归档的目录,点击打开进行目录选择,点击Finish保存目录。,选择cell_Archive目录作为保存cell归档的目录,点击打开进行目录选择,点击Finish保存目录。,选择view_Archive目录作为保存view归档的目录,点击打开进行目录选择,点击Finish保存目录。(2)在弹框中,可以选择点击Select将参考的条目添加进来,然后点击Next…(2)在弹框中,可以选择点击Select将参考的条目添加进来,然后点击Next…

XZ_ZC的博客 3699

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

JDBC获取数据表字段名、注释等信息

JDBC获取数据表字段名、注释等信息 需求:给定数据库信息和表名,扫描表的字段名、字段类型和注释。 注:数据库可以是Oracle、Mysql、DB2、SqlServer等。 解决方法:利用JDBC的DatabaseMetaData来获取数据库的元信息。 用法如下: package util; import java.sql.Connection; import java

龙腾四海365的专栏 2万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

JDBC连接数据库获取表字段的注释信息

最近在编写KUTILS的时候,需要抓取数据库的字段的数据类型、字段名称、字段注释,字段长度,字段精度等信息,这里记录下一些经常会使用到的信息。 public class ConnectionUtil { private static ThreadLocal<Connection> holder = new ThreadLocal<Connection>(); public static Connection getConnection(DataSourceInfo data

坚定的小辣鸡在努力 3584

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

JDBC获取数据库表字段信息

 随着项目的需要,对于数据库支持要求越多越好,最好是Generic JDBC Connection。为此,笔者要求项目程序内只允许使用JDBC接口。在此条件下如何获取表的字段信息?有哪几种方式?都适用吗?字段信息             字段在表里就是一个Column,关于Column在JDBC里面有20多个参数来描述它,称为元数据,Metadata。包括:1.          

Neil的专栏 1万+

Java中使用JDBC获取MySQL数据库的名称、表名和字段名及相关信息

通过java代码,连接MySQL,获取MySQL数据库信息、数据库名称、表名称、字段名称、字段类型、字段对应内容。

wxq_csdn的博客 2497

jdbc获取mysql 列信息_JDBC获取数据库表字段信息

随着项目的需要,对于数据库支持要求越多越好,最好是Generic JDBC Connection。为此,笔者要求项目程序内只允许使用JDBC接口。在此条件下如何获取表的字段信息?有哪几种方式?都适用吗?字段信息字段在表里就是一个Column,关于Column在JDBC里面有20多个参数来描述它,称为元数据,Metadata。包括:1.TABLE_CATString => table cata...

weixin_34164146的博客 581

JDBC中获取数据表的信息

  JDBC中通过MetaData来获取具体的表的相关信息。可以查询数据库中的有哪些表,表有哪些字段,字段的属性等等。MetaData中通过一系列getXXX函数,将这些信息存放到ResultSet里面,然后返回给用户。关于MetaData的说明网上也有不少,这里我只是从我自身学习的角度来记录一下简单使用JDBC以及获取数据表相关信息的方法。   首先,http://hometown.aol.

Liang Tang's 专栏 2129

使用JDBC连接数据库得到表字段的注释,以及其他字段信息

import java.io.File; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.ResultSet; import javax.swing.filechooser.FileSystem...

keke_Xin的专栏 1693

java通过jdbc获取查询sql的字段信息

jar包引入 需要把连接数据库的jar包引入进行,以mysql为例 <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId&g

ourLang 2万+

jdbc获取mysql数据_通过jdbc获取数据库表字段信息

在使用jdbc查询数据库返回的ResultSet中,含有一个对象“ResultSetMetaData”,可以通过这个对象来获取表字段的所有信息,包括:字段名,字段类型,字段类型名称等等,非常的不错,这样我们在使用查询的时候就有了更大的自由发挥程度,我们在获取一张表里的值时,并不需要对数据库表有过多的了解,我们照样可以对它进行正常的操作。举例如下:package test.come.hyq.src;...

weixin_35728216的博客 928

jdbc 获取mysql表注释,JDBC获取数据表字段名、注释等信息

JDBC获取数据表字段名、注释等信息需求:给定数据库信息和表名,扫描表的字段名、字段类型和注释。注:数据库可以是Oracle、Mysql、DB2、SqlServer等。解决方法:利用JDBC的DatabaseMetaData来获取数据库的元信息。用法如下:package util;import java.sql.Connection;import java.sql.DatabaseMetaData...

weixin_39949673的博客 945
上一篇: Jdbc入CRUD入门
下一篇: js原生ajax请求代码示例
SimpleSimpleSimples
博客等级 码龄10年 6451粉丝 115原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值