在这篇文章中,我们将学习如何使用JDBC来检索自动生成的密钥。我们使用MySQL数据库,它具有AUTO_INCREMENT属性为新行生成唯一的ID。
在 Java 数据库连接教程中签出完整的 JDBC 教程。
1. Maven MySQL依赖关系
将以下 MySQL 依赖项添加到您的 maven 项目中:
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.15</version>
</dependency>
2. 数据库设置
让我们创建一个数据库并将其命名为“demo”:
mysql> create database demo;
使用以下语句在上述创建的数据库中创建 Students 表:
CREATE TABLE Students
(
Id BIGINT PRIMARY KEY AUTO_INCREMENT,
Name VARCHAR(100)
);
MySQL的AUTO_INCREMENT属性为新行生成唯一的ID。以下示例显示了如何使用 JDBC 检索自动生成的键值。
3. MySQL Java 自动生成密钥示例
在示例中,我们将一个新的学生记录添加到一个表中,该表的主键由 MySQL 自动递增。我们检索生成的 ID。
package net.javaguides.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;
public class JdbcAutoGenKey {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/demo?useSSL=false";
String user = "root";
String password = "root";
String studentName = "Ramesh Fadatare";
String sql = "INSERT INTO Students(Name) VALUES(?)";
try (Connection con = DriverManager.getConnection(url, user, password); PreparedStatement preparedStatement = con.prepareStatement(sql,
Statement.RETURN_GENERATED_KEYS)) {
preparedStatement.setString(1, studentName);
preparedStatement.executeUpdate();
try (ResultSet resultSet = preparedStatement.getGeneratedKeys()) {
if (resultSet.first()) {
System.out.printf("The ID of new student : %d", resultSet.getLong(1));
}
}
} catch (SQLException ex) {
Logger lgr = Logger.getLogger(JdbcAutoGenKey.class.getName());
lgr.log(Level.SEVERE, ex.getMessage(), ex);
}
}
}
输出:
The ID of new student : 1
作为第一步,我们必须将Statement.RETURN_GENERATED_KEYS传递给 prepareStatement() 方法:
try (Connection con = DriverManager.getConnection(url, user, password);
PreparedStatement pst = con.prepareStatement(sql,
Statement.RETURN_GENERATED_KEYS)) {
然后,我们使用 getGeneratedKeys() 方法检索生成的密钥:
try (ResultSet rs = pst.getGeneratedKeys()) {
由于我们只有一个 insert 语句,因此我们使用 first() 导航到该值:
if (rs.first()) {
System.out.printf("The ID of new author: %d", rs.getLong(1));
}
在 Java 数据库连接教程中签出完整的 JDBC 教程。