DatabaseMetaData类的getTable()、getColumns()方法使用,以及参数的传递问题,针对oracle、mysql、postgres三种数据库进行举例

article/2025/11/10 18:59:49

DatabaseMetaData类

    • DatabaseMetaData实例的获取
      • 获取数据库属性的方法
      • getTable()方法
      • getColumns()方法
      • 关于参数一参数二传参问题

DatabaseMetaData类是java.sql包中的类,利用它可以获取我们连接到的数据库的结构、存储等很多信息。如:
1、数据库与用户,数据库标识符以及函数与存储过程。
2、数据库限制。
3、数据库支持不支持的功能。
4、架构、编目、表、列和视图等。
通过调用DatabaseMetaData的各种方法,程序可以动态的了解一个数据库。

DatabaseMetaData实例的获取

 		Connection conn = DriverManager.getConnection(url,username,password);DatabaseMetaData dbmd = Conn.getMetaData();

获取数据库属性的方法

			//获取数据库名称dbmd.getDatabaseProductName();//获取数据库版本dbmd.getDatabaseProductVersion();//获取数据库驱动dbmd.getDriverName();//获取驱动的版本dbmd.getDriverVersion();//数据库用户名dbmd.getUserName();

getTable()方法

获取数据库表的结构,可以获取具体某一个表,或者模糊获取多个数据库表
参数的解释

/**
* catalog: 要获得表所在的编目
* schemaPattern:要获得表所在的模式
* tableNamePattern:数据表的表达式
* types[]:数据表的类型  可能的类型为"TABLE"、"VIEW"、"SYSTEM TABLE"、
* 			"GLOBAL TEMPORARY","LOCAL  TEMPORARY","ALIAS","SYSNONYM"
*/
ResultSet getTables(String catalog, String schemaPattern,String tableNamePattern, String types[])

下面展示三种数据库的连接参数的配置

  1. PostgreSql数据库
/**
* 	conn.getCatalog()		所连接的数据库的名称
* 	public					固定使用public
* 	tableName				数据表名称,也可以使用“test_%”表示查出以test开头的所有数据表
* 	查出的数据库表的类型		使用TABLE
*/
ResultSet rs = dbmd.getTables( conn.getCatalog() , "public", "tableName", new String[]{"TABLE"});
  1. Oracle数据库
/**
* null								不需要填
* conn.getMetaData().getUserName()	用户名,也就是orcale数据库的用户名
* tableName							数据表名称,也可以使用“test_%”表示查出以test开头的所有数据表
*查出的数据库表的类型				使用TABLE也可以是null
*/
ResultSet rs = dbmd.getTables(null, conn.getMetaData().getUserName(), "table", null);
  1. MySql数据库
/**
* null						不需要填
* conn.getCatalog()			获取所连接的数据库的名称
* tableName					数据表名称,也可以使用“test_%”表示查出以test开头的所有数据表
*查出的数据库表的类型		使用TABLE也可以是null
*/
ResultSet rs = dbmd.getTables(null, conn.getCatalog(), "student", new String[]{"table"});

getColumns()方法

获取数据库具体某个表的结构。
参数的解释

/**
* catalog: 要获得表所在的编目
* schemaPattern:要获得表所在的模式
* tableNamePattern:数据表名称
*columnNamePattern:数据列表达式
*/
ResultSet getColumns(String catalog, String schemaPattern,String tableNamePattern, String columnNamePattern)
  1. Oracle数据库
/**
* null						            不需要填
* conn.getMetaData().getUserName()		数据库用户名
* tableName				            数据表名称
*表列字符串表达式                          null表示查询所有列
*/
ResultSet rs = dbmd.getColumns(null, conn.getMetaData().getUserName(), "tableName", null);
  1. MySql数据库
/**
* null						不需要填
* conn.getCatalog()		获取所连接的数据库的名称
* tableName				数据表名称
*表列字符串表达式             null表示查询所有列
*/
ResultSet rs = dbmd.getColumns(null,conn.getCatalog(),"tableName",null);
  1. PostgreSql数据库
/**
* conn.getCatalog()	    数据库名
* public		        固定public
* tableName				数据表名称
*表列字符串表达式        null表示查询所有列
*/
ResultSet rs = dbmd.getColumns(conn.getCatalog(), "public", "tableName", null);

关于参数一参数二传参问题

  1. MySQL

我们想要查找的就是test下面的表,它的上一级就是test数据库名称,所以第一个参数catalog默认为空,第二个参数schemaPattern就为数据库名称。

在这里插入图片描述

  1. Oracle

而oracle不同的一点就是,ANONYMOUS这其实是他的用户名,所以第一个参数catalog默认为空,第二个参数schemaPattern就为数据库用户名。

在这里插入图片描述

  1. PostgreSql

而postgresql两个参数都填了是因为想要查询到表,上面还有2级目录,所以第一个参数catalog为一级目录,则就是所连接数据库的名称,第二个schemaPattern就为二级目录public。
在这里插入图片描述


http://chatgpt.dhexx.cn/article/q0rrt1Zv.shtml

相关文章

数据库之元数据——DatabaseMetaData的getMetaData()方法的简单使用

DatabaseMetaData和ResultSetMetaData就是两个常用的获取数据库元数据相关信息的接口,本文讲解DatabaseMetaData和ResultSetMetaData接口获取元数据的方法。 package com;import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverMa…

DatabaseMetaData的简单使用

在看大佬写的一个导出数据库建标脚本的接口的时候,发现频频用到DataBaseMetaData这个类,之前也没有 用过这个类下的API,记录一下心得用法。 DatabaseMetaData是java.sql包中的接口,利用它可以获取我们连接到的数据库的结构、存储等…

DatabaseMetaData类

DatabaseMetaData类是java.sql包中的类,利用它可以获取我们连接到的数据库的结构、存储等很多信息。如: 1、数据库与用户,数据库标识符以及函数与存储过程。 2、数据库限制。 3、数据库支持不支持的功能。 4、架构、…

数据库之-元数据 DatabaseMetaData 初学

DatabaseMetaData和ResultSetMetaData就是两个常用的获取数据库元数据相关信息的接口,本文讲解DatabaseMetaData和ResultSetMetaData接口获取元数据的方法。 获取数据库的所有表:(以MySQL和Oracle为例,其他类型的数据库接触不过,…

php备忘录模式

CleverCode最近在看备忘录模式。 1 模式介绍 在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。 2 模式中的角色 1.Originator(发起人):负责创建一个备忘录Memento&…

设计模式 — 行为型模式 — 备忘录模式

目录 文章目录 目录备忘录模式应用场景代码示例 备忘录模式 备忘录模式,在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。 简单来说,就是在运行过程中我们…

“备忘录模式”就这么简单

备忘录模式的官方定义: 在不破坏封装性的前提下,获取一个对象的内部状态,并在该对象之外保存这些状态。这样以后就可以通过该对象恢复到原先保存的状态。 大白话说: 一个对象中一般都封装了很多属性,这些属性的值会随…

(18)备忘录模式

 (18)备忘录模式 定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样就可以将该对象恢复到原先保存的状态 类型:行为类 类图: 我们…

Java设计模式-备忘录模式、备忘录模式应用场景是什么、又怎么使用

继续整理记录这段时间来的收获,详细代码可在我的Gitee仓库Java设计模式克隆下载学习使用! 6.11 备忘录模式 6.11.1 定义 又称快照模式,在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存此状态&am…

C++设计模式(17)——备忘录模式

亦称: 快照、Snapshot、Memento 意图 备忘录模式是一种行为设计模式, 允许在不暴露对象实现细节的情况下保存和恢复对象之前的状态。 问题 假如你正在开发一款文字编辑器应用程序。 除了简单的文字编辑功能外, 编辑器中还要有设置文本格…

Java备忘录模式(Memento)

本文我们来介绍下java23种设计模式中的备忘录模式。 备忘录模式Memento 使用场景 录入大批人员资料。正在录入当前人资料时,发现上一个人录错了, 此时需要恢复上一个人的资料,再进行修改。Word文档编辑时,忽然电脑死机或断电&a…

Java设计模式之备忘录模式

Java设计模式之备忘录模式 1. 备忘录模式概述1.1 备忘录模式简介1.2 备忘录模式类图1.3 备忘录模式的注意事项和细节 2. 备忘录模式实现2.1 项目说明2.2 项目实现 1. 备忘录模式概述 1.1 备忘录模式简介 1.备忘录模式(Memento Pattern)在不破坏封装性的前提下,捕获一个对象的…

【设计模式】备忘录模式

设计模式总结链接 备忘录模式又叫做快照模式(Snapshot Pattern)或Token模式,是对象的行为模式。   备忘录对象是一个用来存储另外一个对象内部状态的快照的对象。备忘录模式的用意是在不破坏封装的条件下,将一个对象的状态捕捉(Capture)住&#xff…

23种设计模式——备忘录模式

目录 备忘录模式(Memento) UML图 示例代码 适用场景 优缺点 备忘录模式和原型模式 例子——游戏进度存档 例子——象棋中的悔棋 备忘录模式(Memento) 本质:保存和恢复内部状态 备忘录模式:在不破坏…

23种设计模式之---备忘录模式

前言 网上搜索备忘录设计模式,基本上均是在一个GoF,基础上衍生下来的。为了避免重复造轮子,这里会结合网上demo,和自己理解进行总结 定义:备忘录(Memento)模式又称标记(Token&…

备忘录模式介绍

备忘录模式介绍 一、基本介绍二、代码实现三、UML类图四、备忘录模式小结其他设计模式 一、基本介绍 备忘录模式(Memento Pattern)属于行为型模式,是指在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外…

设计模式 | 备忘录模式及典型应用

本文的主要内容: 介绍备忘录模式示例备忘录模式总结 备忘录模式 备忘录模式经常可以遇到,譬如下面这些场景: 浏览器回退:浏览器一般有浏览记录,当我们在一个网页上点击几次链接之后,可在左上角点击左箭头…

设计模式之备忘录模式

一、备忘录模式 备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。 原发器(Originator)角色:原发器根据需要决定将自己的哪些内部状态保存到备忘录中,并可以使…

备忘录模式(Java)

备忘录模式(Java) 下面是关于我所写的所有设计模式代码(还是建议自己手打或者想一个别的例子练习一次) (https://github.com/lihang212010/DesignPatterns-/tree/master/designpatterns/src) 先来张百度的UML 下面是我例子的U…

撤销功能的实现——备忘录模式(二)

21.2 备忘录模式概述 备忘录模式提供了一种状态恢复的实现机制,使得用户可以方便地回到一个特定的历史步骤,当新的状态无效或者存在问题时,可以使用暂时存储起来的备忘录将状态复原,当前很多软件都提供了撤销(Undo)操作&#xff0…