【问题标题】:How do I return the last primary key of the last added item in java?如何返回java中最后添加的项目的最后一个主键?
【发布时间】:2010-10-29 13:05:55
【问题描述】:

有一个具有双主键的链接(或引用)表。需要返回从选定表中的当前连接自动生成的最后一个主键。这是在java中。 如果这有所作为,则该数据库位于 MS Access 中。 很抱歉描述得太仓促了,但我们的团队正在紧锣密鼓地工作。

任何链接或建议将不胜感激。

编辑:

使用 SQL 填充数据库。我们为一个表格输入数据,但我们不知道自动生成的数字。需要找出这是什么,以便可以将其输入到 ref 表中。我们只知道一半的复合键,这就是为什么我们需要第二个。

编辑:

迄今为止最好的答案(似乎无法评论)。 我收到以下错误... “线程中的异常“AWT-EventQueue-0”java.lang.UnsupportedOperationException”

有什么建议吗?

【问题讨论】:

  • 关于 UnsupportedOperationException 的遗憾。可能是 Access 不支持此操作。谷歌搜索,似乎并非所有数据库都支持此功能。例如,在我为 Oracle 工作时,我们不得不使用不同的方法,因为它没有标识列。如果现在重新设计您的密钥还为时不晚,请尝试切换到基于 UUID 的密钥,以便您可以在 Java 中生成密钥并将它们推送到数据库中,而不是让数据库生成它们。不过,做出这种改变可能为时已晚。
  • 此项目超时。太重要了。如果有人对解决方法感兴趣,那就有一个。将记录保存到单独的位置,然后将其与上次保存的记录进行比较,然后获取该密钥(如果相同),然后获取下一个上次保存的记录,等等,直到找到密钥。抱歉,我的 C 键由于某种原因不起作用,仅限 Cap,wtf?大声笑

标签: java database methods primary-key return


【解决方案1】:

你需要做两件事。首先,在准备语句或执行语句时,您必须传入一个额外的参数。如果您使用准备好的语句,请执行以下操作:

stmt = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);

如果您没有使用准备好的语句,请在调用 executeUpdate() 时执行以下操作:

stmt.executeUpdate(sql, Statement.RETURN_GENERATED_KEYS);

执行语句后,可以调用

ResultSet rs = stmt.getGeneratedKeys()

这将为您提供一个包含任何已生成键的结果集。

我没有在 Access 中尝试过这种方法,但它适用于 SQL Server 标识列。

【讨论】:

  • 我自己尝试使用 Java 1.7 和 Access 2010 over ODBC,我可以确认在调用 stmt.executeUpdate 函数时我也收到了 java.lang.UnsupportedOperationExeption。
【解决方案2】:

Statement.getGeneratedKeys() 应该可以解决问题...

【讨论】:

    【解决方案3】:

    将复合键的两个值放入包含两个元素的 Object 数组中并返回。

    或者,将新的复合键放入您刚刚保存的实例中并返回它。

    【讨论】:

      猜你喜欢
      • 2016-09-28
      • 1970-01-01
      • 2021-07-06
      • 1970-01-01
      • 1970-01-01
      • 2013-03-19
      • 1970-01-01
      • 2016-01-17
      • 1970-01-01
      相关资源
      最近更新 更多