【问题标题】:JDBC get database unique id for a recordJDBC获取记录的数据库唯一ID
【发布时间】:2013-12-16 12:03:39
【问题描述】:

我想知道是否有任何方法可以通过 JDBC 获取记录的数据库标识符。

例如,我正在查询数据库并返回一个ResultSet,我将它存储在Map 中。我根据从 ResultSet 中检索它们的顺序为每条记录提供一个 ID。

现在我想重新查询数据库并能够将新的ResultSet 与我已经存在的记录相关联。因此,如果一条记录被删除,理想情况下,我可以使用唯一标识符将其从 Map 中删除。

我的问题是我找不到来自 RDBMS 本身的唯一标识符。我尝试使用ResultSet.getRowId(),但并非所有 JDBC 驱动程序提供者都实现此方法。

任何人都可以通过任何方式从 ResultSet 中获取唯一标识数据库中记录的标识符吗?

谢谢。

【问题讨论】:

  • 到目前为止运气好吗?只是出于好奇,你为什么要实施这个,你需要实现什么?

标签: java jdbc


【解决方案1】:

理想情况下,数据库中的每条记录都应该有一个标识符(主键)。最好的方法是始终坚持这一点。

因此,如果一条记录被删除,理想情况下,我可以使用唯一标识符将其从地图中删除。

也许清除地图并重新映射它是一种选择。

【讨论】:

  • 你好埃弗顿。感谢您的回答。我已经实现了一个基于 Connection.getDatabaseMetaData 的解决方案并从那里检索主键。我的问题是解决方案应该是通用的,而不是假设每个表都有一个 PrimaryKey。我知道每个表应该都有一个 PrimaryKey 来识别它,但不幸的是不能依赖它。我在想是否能够获得 RDBMS 本身用于每条记录的 RowId。这样,我每次遍历结果集时都可以检索 Id 并根据需要使用它。
  • 您很难为此实施通用解决方案。如果您正在开发框架/API,也许您应该忽略没有这些标识符的表。我在这里找不到一个好的选择。
  • 一般来说,除了主键之外,RDBMS 中的每一行都没有唯一标识符。
  • 是的,你完全正确。处理这样的事情很痛苦。我想我必须在这里做出一些妥协才能让它以一种通用的方式工作。感谢您的回答。
  • ROWCOUNT 能满足您的目的吗?或者可能是 Records 值的组合,例如将记录映射到 java bean,然后获取 .hashCode()
【解决方案2】:

为什么不能用主键来识别记录?

【讨论】:

  • 你好,Smitesh。感谢您的回答。不幸的是,正如我对埃弗顿的回答所解释的那样,我不能使用 PrimaryKey,因为该解决方案应该适用于任何表(事先不知道),因此我不能假设每个表都有一个主键。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-19
  • 1970-01-01
  • 2012-02-10
  • 1970-01-01
  • 2016-11-15
  • 1970-01-01
相关资源
最近更新 更多