获取自增主键:
在 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)