`
逆风的香1314
  • 浏览: 1431878 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

三种获得自动生成主键的方法,getGeneratedKeys,专用SQL和可更新的结果集

阅读更多
 简单总结了一下我目前知道的方法。
  1. package test;
  2. import java.sql.Connection;
  3. import java.sql.DriverManager;
  4. import java.sql.ResultSet;
  5. import java.sql.Statement;
  6. /**
  7.  * 三种获得自动生成主键的方法。
  8.  * 
  9.  * @author 赵学庆 www.java2000.net
  10.  * 
  11.  */
  12. public class TestGetPK {
  13.   public static void main(String[] args) throws Exception {
  14.     Class.forName("com.gbase.jdbc.Driver");
  15.     String url = "jdbc:gbase://localhost/mytest";
  16.     Connection con = DriverManager.getConnection(url, "root""111111");
  17.     System.out.println(getPK1(con));
  18.     System.out.println(getPK2(con));
  19.     System.out.println(getPK3(con));
  20.   }
  21.   /**
  22.    * 使用JDBC 3.0提供的 getGeneratedKeys。推荐使用
  23.    * 
  24.    * @param con
  25.    * @return
  26.    * @throws Exception
  27.    */
  28.   public static long getPK1(Connection con) throws Exception {
  29.     Statement stmt = con.createStatement();
  30.     stmt.executeUpdate("INSERT INTO t_type (name) values ('Can I Get the Auto Increment Field?')",
  31.         Statement.RETURN_GENERATED_KEYS);
  32.     int autoIncKeyFromApi = -1;
  33.     ResultSet rs = stmt.getGeneratedKeys();
  34.     if (rs.next()) {
  35.       autoIncKeyFromApi = rs.getInt(1);
  36.     }
  37.     return autoIncKeyFromApi;
  38.   }
  39.   /**
  40.    * 使用数据库自己的特殊SQL.
  41.    * 
  42.    * @param con
  43.    * @return
  44.    * @throws Exception
  45.    */
  46.   public static long getPK2(Connection con) throws Exception {
  47.     Statement stmt = con.createStatement();
  48.     stmt.executeUpdate("INSERT INTO t_type (name) values ('Can I Get the Auto Increment Field?')",
  49.         Statement.RETURN_GENERATED_KEYS);
  50.     int autoIncKeyFromFunc = -1;
  51.     ResultSet rs = stmt.executeQuery("SELECT LAST_INSERT_ID()");
  52.     if (rs.next()) {
  53.       autoIncKeyFromFunc = rs.getInt(1);
  54.     }
  55.     return autoIncKeyFromFunc;
  56.   }
  57.   /**
  58.    * 使用可更新的结果集。
  59.    * 
  60.    * @param con
  61.    * @return
  62.    * @throws Exception
  63.    */
  64.   public static long getPK3(Connection con) throws Exception {
  65.     Statement stmt = con.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY,
  66.         java.sql.ResultSet.CONCUR_UPDATABLE);
  67.     ResultSet rs = stmt.executeQuery("SELECT * FROM t_Type");
  68.     rs.moveToInsertRow();
  69.     rs.updateString("name""AUTO INCREMENT here?");
  70.     rs.insertRow();
  71.     rs.last();
  72.     int autoIncKeyFromRS = rs.getInt("id");
  73.     return autoIncKeyFromRS;
  74.   }
  75. }
分享到:
评论
1 楼 zjshan 2010-09-29  
最近在做一个包含此功能的模块,之前是先插入在查询,现在直接搬你的第一个方式用,O(∩_∩)O~

相关推荐

    hibernate主键生成策略

    - **描述**:这是一个特殊的策略,结合了`sequence`和`identity`的特点,在某些数据库(如Oracle)中使用JDBC 3的`getGeneratedKeys`方法来获取生成的主键值。 - **应用场景**:适用于需要高效生成主键且支持JDBC 3...

    mysql取得自动增长的主键值

    - **示例:** 如前文所示的Java代码片段,通过调用`stmt.getGeneratedKeys()`获取结果集,再从结果集中读取自增ID。 5. **最佳实践:** - **选择合适的方法:** 对于简单的应用,可以直接使用`LAST_INSERT_ID()`...

    JDBC6和JDBC14

    3. **Statement的getGeneratedKeys()方法**:返回由INSERT、UPDATE或DELETE语句生成的自动增长键,这对于获取新插入行的主键非常有用。 4. **RowSet接口的增强**:JDBC6支持类型4的JavaBeans Compliant RowSets,...

    mysql的插入问题 怎么获得自动增长的ID

    ### MySQL的插入问题:如何获取自动增长的ID ...在使用Java程序通过JDBC接口插入记录时,推荐使用`PreparedStatement`的`getGeneratedKeys()`方法来获取自动生成的ID,以确保数据的完整性和安全性。

    java使用jdbc插入信息时获取id1

    标题"java使用jdbc插入信息时获取id1"指的是在Java程序中,通过JDBC执行SQL插入语句后,如何获取数据库自动生成的唯一标识符(通常是主键ID)。描述中的"设置成可以获取主键"是关键步骤,这可以通过调用`...

    sql server jdbc 连接大部分jar

    5. **sqljdbc4.jar**: 针对SQL Server 2008引入,这个版本的驱动添加了对Java 6新特性(如Statement的getGeneratedKeys方法)的支持,以及一些性能和稳定性改进。 6. **sqljdbc41.jar**和**sqljdbc42.jar**: 分别...

    支持主键自增的数据库获取主键值.zip

    但这种方式并不适用于所有数据库,因此MyBatis提供了更通用的解决方案,即通过JDBC的`Statement.getGeneratedKeys()`方法来获取自增主键。 总的来说,当使用MyBatis操作支持主键自增的数据库时,正确配置映射文件并...

    Mybatis使用useGeneratedKeys获取自增主键的方法

    一种可能的解决方案是使用`LAST_INSERT_ID()`函数,这是一个MySQL特有的SQL函数,可以在更新语句后立即获取自增主键的最新值。然而,这需要在Mybatis的映射文件中添加额外的逻辑来执行查询。 总之,Mybatis的`...

    jdbc 插入记录并返回自增主键值

    对于具有自增主键的表,MySQL会自动为新插入的记录生成主键值。为了获取这个值,我们需要在插入语句中使用`LAST_INSERT_ID()`函数,并在`Statement`对象上设置`RETURN_GENERATED_KEYS`属性: ```java try ...

    总结一天学会MyBatis框架所有知识.docx

    查询操作中,`selectList`方法将结果集封装为List集合,`selectMap`方法则将结果集封装为Map集合。`selectOne`方法用于查询单个记录并将其转换为实体类对象。此外,MyBatis还支持模糊查询,可以通过`like`等条件进行...

    JDBC驱动4.0

    - `getGeneratedKeys()`返回生成的主键值,适用于自增主键。 **PreparedStatement的增强** - 支持`?|?`占位符语法,用于有条件地插入或更新数据。 - `setRowId(int index, RowId value)`方法,处理行标识符。 **...

    1+X考试真题-Java-中级-2021-11(1).docx

    这是因为 MyBatis 提供了一个名为 useGeneratedKeys 的选项,该选项可以让 MyBatis 使用 JDBC 的 getGeneratedKeys 方法来获取自动生成的主键值。 2. MyBatis 的特点有误的是什么? 答案:B. 能够在运行期针对库表...

    Jdbi3官方手册中文版

    这样,Jdbi会自动生成接口的实现,使得数据库交互更加整洁和安全。例如,你可以定义一个`UserDao`接口: ```java public interface UserDao { @SqlUpdate("CREATE TABLE user (id INTEGER PRIMARY KEY, name ...

    hibernate配置属性参数[定义].pdf

    7. `hibernate.jdbc.use_get_generated_keys`:在插入数据后,允许使用 JDBC 的 `getGeneratedKeys()` 方法获取自动生成的主键。 了解并正确配置这些属性对于实现高效、可靠的 Hibernate 应用至关重要。它们可以...

    JDBC 4 ORACLE

    4. **新API和功能**:如`Connection.isValid(int timeout)`方法用于检测数据库连接是否有效,以及`Statement.getGeneratedKeys()`获取自动生成的键值。 **Oracle数据库的JDBC使用:** 1. **驱动加载**:使用Oracle...

    hibernate 配置属性参数详情(全)

    5. **hibernate.jdbc.use_scrollable_resultset**:启用JDBC2的可滚动结果集,提高处理大数据集的能力。 6. **hibernate.jdbc.use_streams_for_binary**:在处理二进制或可序列化类型时使用流,提高效率。 7. **...

    java框架之hibernate

    #### 三、主键生成策略 Hibernate提供了多种主键生成策略,每种都有其适用场景。 1. **Assigned**: - 应用程序负责为主键赋值,在保存前手动设置。 - 这是默认生成策略。 2. **Foreign**: - 使用另一个关联...

    hibernate参数配置

    19. **hibernate.jdbc.use_get_generated_keys**: 开启后,Hibernate会在插入数据后通过`PreparedStatement.getGeneratedKeys()`获取数据库自动生成的键值。 这些参数的正确配置对于优化Hibernate性能、减少资源...

    hibernate配置详解

    在插入数据后,通过JDBC3的PreparedStatement.getGeneratedKeys()获取自动生成的键。 了解并正确配置这些属性,能够帮助你优化Hibernate在实际项目中的性能和功能,使其更好地适应你的需求。记得根据你的具体...

    java获取新insert数据自增id的实现方法

    在具体生成id的时候,我们的操作顺序一般是:先在主表中插入记录,然后获得自动生成的id,以它为基础插入从表的记录。但是,这个过程中存在一个困难,就是插入主表记录后,如何获得它对应的id。通常的做法,是通过...

Global site tag (gtag.js) - Google Analytics