如何从 JAVA 中的 ResultSet 或 ResultSetMetaData 对象中获取数据库表的主键的列名?

Posted

技术标签:

【中文标题】如何从 JAVA 中的 ResultSet 或 ResultSetMetaData 对象中获取数据库表的主键的列名?【英文标题】:How can I get the column name of the primary key of a Database Table from the ResultSet or ResultSetMetaData object in JAVA? 【发布时间】:2010-02-06 11:56:08 【问题描述】:

我正在编写一个 Java 应用程序。我有一个结果集。现在我想找出表的主键的列名。

是否可以通过 ResultSet 对象或 ResultSetMetaData 对象或任何其他方式获取该列名。

我没有找到任何方法。

【问题讨论】:

查看数据库以了解表是如何定义的有什么问题?当存在多个唯一键约束时,就用户而言,一个可能是“主键”,并且代理键在数据库中被定义为主键。您为什么要尝试自动执行此操作? 【参考方案1】:

没有。您不会从 ResultSetResultSetMetadata 获得该信息。

你想要使用的是DatabaseMetadata 类。从该类检查 getPrimaryKeys 方法以获取您想要的信息。

当然,要使用它,您需要知道表的名称。

【讨论】:

“目录”和“模式”是什么意思? “模式”是指数据库名称吗? @Yatendra,您使用的是什么数据库?这些在 DB2 中很常见。如果您使用 eclipse,并连接到“数据库开发”视图,您将能够自己解决。 @ericp,我正在使用 Eclipse IDE 和 mysql 数据库。但我不希望我的代码依赖于任何特定的数据库。 快速谷歌搜索,发现tutorialized.com/view/tutorial/Database-Metadata-with-JDBC/… - :有时,对于给定的问题,根据数据库供应商有不同的解决方案。例如,获取 Oracle 数据库表名的代码与获取 MySQL 数据库表名的代码不同。当您为关系数据库开发应用程序或框架时,请确保您的连接池管理器将供应商名称作为参数。” @Pablo Santa Cruz:谢谢!我正在寻找这个答案。为什么它仍然不被接受?【参考方案2】:

我想补充的是,如果在一个表中你有自增字段,它必须是主键。因此,您的代码可能如下所示:

if(metaColumn.isAutoIncrement(i)) 
  primaryKey = metaColumn.getColumnName(i);
  i=nColoumn+1;

它使用ResultSetMetaData

【讨论】:

如果主键不是身份,这将失败。 也许我的经验仅限于 MySQL,但在 MySQL 中,自增必须是主键。 Cmiiw。【参考方案3】:

一个很好的工具可以用来验证元数据信息是dbVisualizer。

它使用 JDBC 元数据来检索表定义和数据库的其他部分。 Schema 和 Catalog 是表定义视图中的列 - 因此您可以检查您最喜欢的数据库在这些列中的哪些值。

dbVisualizer 提供免费的基本版本。

【讨论】:

以上是关于如何从 JAVA 中的 ResultSet 或 ResultSetMetaData 对象中获取数据库表的主键的列名?的主要内容,如果未能解决你的问题,请参考以下文章

Java中,将ResultSet映射为对象和队列及其他辅助函数

java中如何获取ResultSet rs结果集中的条数?

如何从java中的结果集中获取列名[重复]

如何从 java.sql.ResultSet 获取列名列表 [重复]

如何从java中的mysql表中检索数组中的值? [关闭]

一次性获取`java.sql.ResultSet`行中的所有值