通过Java实现获取表的自增主键值

 更新时间:2023年06月15日 15:20:59   作者:从未止步..  
这篇文章主要为大家详细介绍了如何通过Java实现获取表的自增主键值,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的可以了解一下

获取自增主键

在 Java 程序中,使用 JDBC 插入记录到 MySQL 数据库时,可以通过以下步骤获取自增主键的值:

第一步:在 PreparedStatement 对象中添加 Statement.RETURN_GENERATED_KEYS 常量作为参数,表示希望获取自动生成的主键

代码如下所示:

PreparedStatement stmt = connection.prepareStatement("INSERT INTO user VALUES (?,?,?)", Statement.RETURN_GENERATED_KEYS);
stmt.setInt(1, 2);
stmt.setString(2, "李四");
stmt.setString(3, "11000");
stmt.executeUpdate();

第二步: 调用 PreparedStatement 对象的 getGeneratedKeys() 方法获取 ResultSet,getGeneratedKeys() 是 JDBC 中的一个方法,它用于获取执行 SQL 语句后所生成的键,例如主键值、自增长键等。

该方法返回一个 ResultSet 对象,其中包含了所生成的键的信息,源码如下所示:

需要注意的是,在某些情况下,执行 SQL 操作并不一定能够返回生成的键,这可能是因为数据库不支持生成键,或者 SQL 语句中没有生成键的选项。

代码如下所示:

ResultSet rs = stmt.getGeneratedKeys();

第三步:从 ResultSet 中获取自动生成的主键值

(rs.next()) {
            int id = rs.getInt(1);
            System.out.println("Inserted with ID: " + id);
 }

注意,ResultSet 中的第一个列就是自动生成的主键列,使用 getInt(1) 或 getLong(1) 方法获取该列的值。

完整代码示例:

package Test;
import java.sql.*;
public class myjdbc {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        //注册驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        //获取连接
        String url="jdbc:mysql://localhost:3306/创建的数据库名";
        String username="root";
        String password="你的数据库密码";
        Connection connection= DriverManager.getConnection(url,username,password);
        //添加常量参数
        PreparedStatement stmt = connection.prepareStatement("INSERT INTO 你的数据表名 VALUES (?,?,?)", Statement.RETURN_GENERATED_KEYS);
        stmt.setInt(1, 2);
        stmt.setString(2, "李四");
        stmt.setString(3, "11000");
        stmt.executeUpdate();
        //获取ResultSet
        ResultSet rs = stmt.getGeneratedKeys();
        //获得常量值
        if (rs.next()) {
            int id = rs.getInt(1);
            System.out.println("Inserted with ID: " + id);
        }
    }
}

获取自增主键值的前提条件是:在数据表中必须存在自增主键。如果不存在自增主键,那么将无法获取自增主键的值。

最后补充一下什么是生成键?

生成键

数据库中的生成键(Generated Key)是指在插入一条新记录时,由数据库自动生成的主键值或唯一标识符。

它通常与自增长列(Auto Increment Column)或序列(Sequence)相关联,用于确保插入的新记录具有唯一的标识符。

常见的生成键类型包括:

1. 自增长键(Auto Increment Key):在每次插入数据时,自动递增的唯一整数值。在 MySQL 中使用 `AUTO_INCREMENT` 关键字实现自增长键。

2. 序列(Sequence):由一个计数器提供唯一整数值的对象。在 Oracle、PostgreSQL 和 SQL Server 等数据库中支持序列。

3. UUID 键(Universally Unique Identifier Key):全球唯一标识符,使用随机数生成。在 MySQL 中使用 `UUID()` 函数实现 UUID 键。

在使用 JDBC 操作数据库时,可以通过 ResultSet 的方法 getGeneratedKeys() 获取生成键的值。

如果新的记录具有自动生成键,或者原始记录的所有生成键已返回,则此方法返回一个 ResultSet 对象,其中包含代表生成键的值的一列,通常情况下,这个值是一个整数,可以通过 getInt(1) 或者 getLong(1) 方法获取主键值。

判断数据库是否支持生成键的方法

在 JDBC 中,我们可以通过 DatabaseMetaData 获取数据库的元数据信息,进而判断该数据库是否支持生成键。

具体实现步骤如下:

第一步:

//获取当前数据库连接的 DatabaseMetaData 对象。
DatabaseMetaData metaData = connection.getMetaData();

可以通过 getDatabaseProductName() 方法获取数据库的名称,再结合不同的数据库驱动的实现方式,来判断该数据库是否支持生成键。

例如,在 MySQL 数据库中,可以使用 supportsGetGeneratedKeys() 方法来判断是否支持生成键。如果该方法的返回值为 true,则说明该数据库支持生成键。

完整代码如下:

package Test;
import java.sql.*;
public class myjdbc {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        //注册驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        //获取连接
        String url="jdbc:mysql://localhost:3306/wjr";
        String username="root";
        String password="112899";
        Connection connection= DriverManager.getConnection(url,username,password);
        DatabaseMetaData metaData = connection.getMetaData();
        boolean supportsGeneratedKeys = metaData.supportsGetGeneratedKeys();
        if (supportsGeneratedKeys) {
            System.out.println("该数据库支持生成键");
        } else {
            System.out.println("该数据库不支持生成键");
        }
    }
}

到此这篇关于通过Java实现获取表的自增主键值的文章就介绍到这了,更多相关Java表的自增主键值内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java方法及数组相关原理解析

    Java方法及数组相关原理解析

    这篇文章主要介绍了Java方法及数组相关原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-12-12
  • 面试必问项之Set实现类:TreeSet

    面试必问项之Set实现类:TreeSet

    这篇文章主要介绍了Java TreeSet类的简单理解和使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2021-07-07
  • spring-session简介及实现原理源码分析

    spring-session简介及实现原理源码分析

    这篇文章主要介绍了spring-session简介及实现原理源码分析,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • 详解IntelliJ IDEA 快捷键整合(大全)

    详解IntelliJ IDEA 快捷键整合(大全)

    这篇文章主要介绍了详解IntelliJ IDEA 快捷键整合,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-08-08
  • SpringBoot @Configuration与@Bean注解使用介绍

    SpringBoot @Configuration与@Bean注解使用介绍

    这篇文章主要介绍了SpringBoot中的@Configuration与@Bean注解,在进行项目编写前,我们还需要知道一个东西,就是SpringBoot对我们的SpringMVC还做了哪些配置,包括如何扩展,如何定制,只有把这些都搞清楚了,我们在之后使用才会更加得心应手
    2022-10-10
  • Java接口返回省市区树形结构的实现

    Java接口返回省市区树形结构的实现

    本文主要介绍了Java接口返回省市区树形结构的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • 利用JAVA反射,读取数据库表名,自动生成对应实体类的操作

    利用JAVA反射,读取数据库表名,自动生成对应实体类的操作

    这篇文章主要介绍了利用JAVA反射,读取数据库表名,自动生成对应实体类的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • JDK8时间相关类超详细总结(含多个实例)

    JDK8时间相关类超详细总结(含多个实例)

    jdk1.8的一些新特性简化了代码的写法,减少了部分开发量,下面这篇文章主要给大家介绍了关于JDK8时间相关类超详细总结,文中包含了多个实例代码,需要的朋友可以参考下
    2023-01-01
  • 解决SpringMVC项目连接RabbitMQ出错的问题

    解决SpringMVC项目连接RabbitMQ出错的问题

    这篇文章主要介绍了解决SpringMVC项目连接RabbitMQ出错的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • 论java如何通过反射获得方法真实参数名及扩展研究

    论java如何通过反射获得方法真实参数名及扩展研究

    这篇文章主要为大家介绍了java如何通过反射获得方法的真实参数名以及扩展研究,有需要的朋友可以借鉴参考下,希望能够有所帮助祝大家多多进步早日升职加薪
    2022-01-01

最新评论