代码之家  ›  专栏  ›  技术社区  ›  Sean

Java中SQL插入后自动增量标识字段的访问

  •  16
  • Sean  · 技术社区  · 16 年前

    关于如何通过调用读取分配给新创建记录的自动递增标识字段的任何建议 java.sql.Statement.executeUpdate ?

    java.sql 要做到这一点,以及任何关于人们在DB平台上的体验的输入。

    5 回复  |  直到 8 年前
        1
  •  24
  •   Daniel Spiewak    16 年前

    PreparedStatement stmt = conn.prepareStatement(sql, 
                                     Statement.RETURN_GENERATED_KEYS);
    // ...
    
    ResultSet res = stmt.getGeneratedKeys();
    while (res.next())
        System.out.println("Generated key: " + res.getInt(1));
    

    • 德比
    • MySQL

    对于不起作用的数据库(HSQLDB、Oracle、PostgreSQL等),您需要使用特定于数据库的技巧。例如,在PostgreSQL上,您可以调用 SELECT NEXTVAL(...)

    请注意 executeUpdate(...) 它们是相似的。

        2
  •  3
  •   Mosty Mostacho    13 年前
    ResultSet keys = statement.getGeneratedKeys();
    

    稍后,只需迭代ResultSet。

        3
  •  0
  •   ScArcher2    16 年前

    您可以使用类似hibernate的ORM。我认为它为你做了这些。

        4
  •  0
  •   Alexandre Victoor    16 年前

    @ScArcher2:我同意,Hibernate需要再次调用以获取新生成的标识,除非使用高级生成器策略(序列、hilo…)

        5
  •  0
  •   Daniel Spiewak    16 年前

    极其 危险的过程 INSERT 生成和选择自动生成的关键点必须是原子的,否则您可能会在关键点选择上收到不一致的结果。考虑两个异步 插入 在任何一个有机会选择生成的密钥之前,它们都完成了。哪个进程获取哪个密钥列表?为了保持结果的确定性,大多数跨数据库的orm必须做一些恼人的事情,比如进程内线程锁定。这是