如何从 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】:没有。您不会从 ResultSet 或 ResultSetMetadata 获得该信息。
你想要使用的是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映射为对象和队列及其他辅助函数