DatabaseMetaData元数据

DatabaseMetaData元数据通过java.sql.DatabaseMetaData接口,您可以获得有关您已连接到的数据库的元数据。例如,你可以看到哪些表的数据库,和什么中定义的列的每个表的数量,是否是给定功能支持等。DatabaseMetaData接口包含很多的方法,和并不是所有将在本教程中覆盖。你应该看看的JavaDoc。此文本将只是覆盖面不够,给你一种感觉,你可以用它。获得一个DatabaseMetaData实例

大家好,又见面了,我是你们的朋友全栈君。

简要概述:
数据:数据库、表、列的定义信息。

**Connection.getMetaData()
DataBaseMetaData对象**
– getURL():返回一个String类对象,代表数据库的URL
– getDatabaseProductName():返回数据库的产品名称。
– getDatabaseProductVersion():返回数据库的版本号。
– getDriverName():返回驱动驱动程序的名称。
– getDriverVersion():返回驱动程序的版本号。
– isReadOnly():返回一个boolean值,指示数据库是否只允许读操作。

通过java.sql.DatabaseMetaData接口,您可以获得有关您已连接到的数据库的元数据。例如,你可以看到哪些表的数据库,和什么中定义的列的每个表的数量,是否是给定功能支持等。

DatabaseMetaData接口包含很多的方法,和并不是所有将在本教程中覆盖。你应该看看的 JavaDoc。此文本将只是覆盖面不够,给你一种感觉,你可以用它。

获得一个 DatabaseMetaData 实例
您从Connection,这样获得的DatabaseMetaData对象 ︰

DatabaseMetaData databaseMetaData = connection.getMetaData();

一旦你得到此DatabaseMetaData实例,你可以调用方法它获取有关数据库的元数据。

数据库产品名称和版本
您可以获取数据库产品名称和版本,像这样 ︰

int    majorVersion   = databaseMetaData.getDatabaseMajorVersion();
int    minorVersion   = databaseMetaData.getDatabaseMinorVersion();

String productName    = databaseMetaData.getDatabaseProductName();
String productVersion = databaseMetaData.getDatabaseProductVersion();

如果你已经知道到底什么数据库对运行应用程序,您可能不需要这个。但是,如果你正在开发一种产品,需要能够对许多不同的数据库产品运行,此信息可以很方便地确定哪些特定的数据库功能它支持,它支持 SQL 等。

数据库驱动程序版本
你可以获得使用,像这样的 JDBC 驱动程序的驱动程序版本 ︰

int driverMajorVersion = databaseMetaData.getDriverMajorVersion();
int driverMinorVersion = databaseMetaData.getDriverMinorVersion();

再次,如果针对非常具体的数据库运行您的应用程序,这可能真的无法如此翔实。然而,对于应用程序,需要能够运行对许多不同的数据库产品和版本,知道使用驱动程序的确切版本可能一个优势。例如,某些驱动程序版本可能包含一个错误,应用程序需要变通。或者,驱动程序可能会丢失一项功能,然后,应用程序需要变通。

列出表
您可以在您的数据库中,通过DatabaseMetaData获得的已定义的表的列表。这里是如何做到这一点 ︰

String   catalog          = null;
String   schemaPattern    = null;
String   tableNamePattern = null;
String[] types            = null;

ResultSet result = databaseMetaData.getTables(
    catalog, schemaPattern, tableNamePattern, types );

while(result.next()) {
    String tableName = result.getString(3);
}

首先你调用getTables()方法,传递给它 4 参数是字段均为 null。参数可以帮助限制ResultSet返回的表的数目。但是,因为我想要返回的所有表,我传递 null 在所有这些参数。看到更具体的细节,有关参数的 JavaDoc。

从getTables()方法返回的ResultSet包含匹配 4 给定的参数 (其中全部为 null) 的表名称的列表。此ResultSet包含 10 个栏目,其中每个包含给定表的信息。带有索引 3 列包含表名称本身。检查的 JavaDoc 有关其余的列的详细信息。

列出表中的列
您也可以获得通过DatabaseMetaData表的列。这里是如何 ︰

String   catalog           = null;
String   schemaPattern     = null;
String   tableNamePattern  = "my_table";
String   columnNamePattern = null;


ResultSet result = databaseMetaData.getColumns(
    catalog, schemaPattern,  tableNamePattern, columnNamePattern);

while(result.next()){
    String columnName = result.getString(4);
    int    columnType = result.getInt(5);
}

首先你调用getColumns()方法,传递 4 个参数。其中,仅tableNamePattern设置为一个非 null 值。将其设置为您想要获取的列的表的名称。

getColumns()方法返回的ResultSet包含给定表的列的列表。带有索引 4 列包含的列的名称,并带有索引 5 列包含的列类型。列类型是整数匹配在java.sql.Types中找到的类型常量之一

要获取有关获取表的列信息的更多详细信息,请查阅 JavaDoc。

表的主键
它也是可能获得一个表的主键。你这样做,像这样 ︰

String   catalog   = null;
String   schema    = null;
String   tableName = "my_table";

ResultSet result = databaseMetaData.getPrimaryKeys(
    catalog, schema, tableName);

while(result.next()){
    String columnName = result.getString(4);
}

第一次调用getPrimaryKeys()方法,将三个参数传递给它。只有tableName为非空在这个例子中。

getPrimaryKeys()方法返回的ResultSet包含组成给定表的主键的列的列表。带有索引 4 列包含列名称。

主键可能由多个列组成。这种被称为复合键。如果您的表包含复合键,ResultSet将包含多个行。复合键中每一列的一行。

支持的功能
DatabaseMetaData对象还包含有关功能的信息,JDBC 驱动程序和数据库支持。其中的许多功能被代表的方法,可以调用,这将返回 true 或 false 根据给定的特征是否受支持。

将不会覆盖所有的功能支持相关的方法在这里。我只是会给你几个例子。功能支持方法和它们的含义的完整列表,请咨询 JavaDoc。

databaseMetaData.supportsGetGeneratedKeys();

databaseMetaData.supportsGroupBy();

databaseMetaData.supportsOuterJoins();
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/150970.html原文链接:https://javaforall.net

(0)
上一篇 2022年6月19日 上午7:46
下一篇 2022年6月19日 上午7:46


相关推荐

  • 三、设计模式介绍—她是谁,我们要去哪里? #和设计模式一起旅行#

    模式模式(Pattern),指事物的标准样式,百度百科上面说的,其实说白了模式就是我们现在说的套路!模式 == 套路模式是一种思想,说大了特别的复杂和深奥,不管怎么样模式的使用可以解决特定场景下特定的问题!准确表达:模式是在特定环境下人们解决某类重复出现问题的一套成功或有效的解决方案。软件模式那么在软件中使用模式,就是软件模式(Software Pattern),用…

    2022年2月27日
    39
  • 黑群晖docker清理缓存_群晖Docker半洗白 不关机快速修改sn/mac方法

    黑群晖docker清理缓存_群晖Docker半洗白 不关机快速修改sn/mac方法老版本Docker下载地址:https://archive.synology.com/download/Package/spk/Docker/17.05.0-0401/Docker-x64-17.05.0-0401.spkDSM_DDSM_25426.pat下载地址:https://cndl.synology.cn/download/DSM/release/6.2.3/25426/DSM_DDS…

    2022年6月11日
    107
  • Java锁——自旋锁和互斥锁的区别

    Java锁——自旋锁和互斥锁的区别自旋锁和互斥锁的区别自旋锁是一种互斥锁的实现方式而已 相比一般的互斥锁会在等待期间放弃 cpu 自旋锁 spinlock 则是不断循环并测试锁的状态 这样就一直占着 cpu 互斥锁 用于保护临界区 确保同一时间只有一个线程访问数据 对共享资源的访问 先对互斥量进行加锁 如果互斥量已经上锁 调用线程会阻塞 直到互斥量被解锁 在完成了对共享资源的访问后 要对互斥量进行解锁 临界区 每个进程中访问临界

    2026年3月10日
    4
  • PyCharm的几个使用技巧(持续更新)[通俗易懂]

    PyCharm的几个使用技巧(持续更新)[通俗易懂]目录引言1、轻松加注释2、让代码自动缩进3、快速自定义文件4、一键全局格式化5、轻松查找与替换6、关闭波浪线引言PyCharm是个十分强大的Python编辑器,笔者在日常的工作中学到了很多该IDE的使用技巧,有的是从别人那里学到的,有的是自己学习的。you  以下将介绍几个简单的PyCharm使用技巧。以windows系统中的PyCharm使用为例。1、轻松加注释多行注释:CTRL+/…

    2022年8月25日
    8
  • 傅里叶变换公式整理,意义和定义,概念及推导

    傅里叶变换公式整理,意义和定义,概念及推导看到论坛有一个朋友提问为什么傅里叶变换可以将时域变为频域?这个问题真是问到了灵魂深处。在这我只能简单讲讲我的理解,要深刻理解翻信号处理教科书是最好的方法。1.如何描述信号我们常常用数学模型去抽象物理事件。信号也可以用数学模型来表示。有了信号的数学模型,我们就可以利用数学计算对信号模型做各种各样的改变。如果加以计算机,模电,数电的相关知识,我们就可以将我们对信号模型的改变转换为对物理信…

    2022年7月17日
    25
  • 华为服务器升腾芯片,华为公布昇腾910芯片架构细节:7nm+ EUV工艺、32核达芬奇…

    华为服务器升腾芯片,华为公布昇腾910芯片架构细节:7nm+ EUV工艺、32核达芬奇…在今天开幕的行业顶级活动、第31届HotChips大会上,华为也作为主角之一参加,与AMD、Intel、ARM等巨头一道介绍自家在芯片方面的最新成果。华为此次活动的主题是AI芯片所用的“DaVinci(达芬奇)”架构,成品是去年发布的昇腾310(Ascend310)、昇腾910芯片和麒麟810芯片,另外,AI训练芯片已经应用上了HBM2E内存,即HBM2增强版,SK海力士产品的阵脚传输速率高…

    2025年9月3日
    20

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号