获取自增主键:
在 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("该数据库不支持生成键"); } } }
将唯一的UUID标识符设置为对象的id:
package com.wjr; import lombok.Data; import java.util.UUID; @Data public class User { private UUID id; private String name; private String password; public User(String name,String password){ this.name=name; this.password=password; this.id = UUID.randomUUID();//调用UUID的方法获取唯一的标识符 } public static void main(String[] args) { User user=new User("张三","123456"); System.out.println(user); } }
输出如下所示:
User(id=2175c6b2-fd24-4f8a-8187-dd566f3ded26, name=张三, password=123456)