通過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 中的一個方法,它用于獲取執(zhí)行 SQL 語句后所生成的鍵,例如主鍵值、自增長鍵等。
該方法返回一個 ResultSet 對象,其中包含了所生成的鍵的信息,源碼如下所示:

需要注意的是,在某些情況下,執(zhí)行 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/創(chuàng)建的數據庫名";
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表的自增主鍵值內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Java實現Excel導出的全部流程(多Sheet、復雜格式)
這篇文章主要介紹了如何根據圖片格式導出Excel文件,并根據項目號區(qū)分不同的sheet頁,通過Maven依賴、實體類定義、導出工具和使用示例,詳細描述了如何實現這一功能,包括Sheet分組邏輯、格式還原和動態(tài)數據處理,需要的朋友可以參考下2025-12-12
Java?Web項目打包部署解析之從IDEA配置到Tomcat運行
在Java應用開發(fā)中,打包和部署是至關重要的環(huán)節(jié),它們直接影響著應用的可維護性、可擴展性以及性能,這篇文章主要介紹了Java?Web項目打包部署之如何從IDEA配置到Tomcat運行的相關資料,需要的朋友可以參考下2025-11-11
新手小白看過來學JAVA必過IO流File字節(jié)流字符流
這篇文章主要介紹了新手小白學JAVA到IO流File字節(jié)流字符流的重點,對流不清楚的新手同學快進來學習吧,大佬也可以進來溫故一下2021-08-08

