如何通过java程序获取表的自增主键值?

news2024/11/22 5:08:50

获取自增主键:

在 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("该数据库不支持生成键");
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/649116.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Zabbix与信创、云原生、高可用等热点解析|Zabbix大会·上海站

根据信通院调研显示,超过90%的中国金融机构已经引入开源软件。工信部突出强调开源在驱动软件产业发展的重要作用。作为一个完全开源免费的企业级监控解决方案,Zabbix在IT基础监控、网络监控、Server监控和云监控等领域都获得了同行和用户极高的评价。 Za…

html好看的登录页面1(十三种风格登录页面源码)

文章目录 1.登录风格效果说明1.1 背景凹起风登录界面1.2 弹出风登录界面1.3 科技时尚风登录界面1.4 蓝色一夏风登录界面1.5 模糊背景左右风登录界面1.6 上中下介绍风登录界面1.7 深沉科技风登陆界面1.8 舒适简洁风登录界面1.9 网站风登录界面1.10 小框清爽风登录界面1.11 夜色风…

【IoU全总结】GIoU, DIoU, CIoU, EIoUFocal, αIoU, SIoU,WIoU【基础收藏】

🥑 Welcome to Aedream同学 s blog! 🥑 并不存在效果一定优秀的IoU,需要结合自己的网络、数据集试验。 不想深究原理可直接跳转总结。文内公式均为手打,非图片,方便查看 文章目录 L1 Loss,L2Loss&#xff0…

深入浅出剖析EL表达式和JSTL

el表达式 产生背景 从JSP2.0开始,就不推荐使用java脚本,而是使用el表达式或者动态标签代替 java脚本; 页面标签; 概念和原理 概念:Expression Language :jsp内置的一种表达式语言;原理:el表达式的出现目的是替换js…

这些excel英语翻译方法你会吗?

大家平常的时候应该都会去做Excel表格吧?无论是在读书、上班或者日常,必然都会使用到吧?但是在处理国际业务时,我们要来处理表格就会比较费时一点,因为语言的不同会有一点影响,所以我们可能需要将Excel表格…

第九章节 用Python实现常微分方程初值问题的数值解法

参考书籍:数值分析 第五版 李庆杨 王能超 易大义编 第9章 常微分方程初值问题的数值解法 文章声明:如有发现错误,欢迎批评指正 文章目录 欧拉法后退的欧拉方法梯形方法改进欧拉公式补充龙格—库塔方法线性多步法阿当姆斯显示与隐式公式 9.1引…

cesium学习(entities实体)

什么是entities CesiumJS具有丰富的空间数据API,可分为两类:面向图形开发人员的低级Primitive API,以及用于数据驱动可视化的高级Entity API。 entitiesAPI公开了一组一致设计的高级对象,这些对象将相关的可视化和信息聚合到一个…

(转载)有导师学习神经网络的分类(matlab实现)

有导师学习神经网络以其良好的学习能力广泛应用于各个领域中,其不仅可以解决拟合回归问题,亦可以用于模式识别、分类识别。将继续介绍两种典型的有导师学习神经网络(GRNN和PNN),并以实例说明其在分类识别中的应用。 1 理论基础 1.1 广义回归神经网络(…

小雉系统U盘安装包制作

​ 本文原地址: http://www.feitianzhi.com/boke/index.php/archives/57/ 概述 小雉系统可从线上系统制作安装包到U盘,制作的安装包可用于新系统的安装; 小雉系统只提供升级包,对应的安装包均是客户在应用升级包后按本文或http://www.f…

为什么AirtestIDE的selenium Window突然无法检索控件了?

1. 前言 最近有很多朋友跟我们反馈,为什么1.2.15版本的IDE没办法做网页元素检索了,是不是我们不支持selenium了之类的。 测试后发现,目前版本确实存在这个问题,原因是Chrome113.0.5672.127(最新)版本过高,AirtestIDE…

ansible 的学习

目录 ansible学习思路: ansible是什么? 官网:Ansible is Simple IT Automation ansible的组成: 参考文档:Ansible入门与playbook实战-~学无止境,学以致用 ^ _ ^-51CTO博客 ansible操作体验: 1、先…

机器学习算法(一)KNN近邻算法

一、KNN算法概述 KNN:K-Nearest-Neighbor算法,即K值为邻近。KNN是最简单的分类算法之一,同时,也是最常用的分类算法之一。KNN算法是有监督学习中的分类算法。 二、原理 基于基于iris数据集,具体经历下面四步流程&am…

指南 | OpenAI API对PDF进行总结提炼

前言 本文将针对信息过载阅读搜索难的问题,展示如何利用OpenAI API高效地自动总结PDF,从而提高阅读效率和节省时间。包含详尽的操作教程、实际案例及最佳实践,旨在确保准确且高效地进行文档摘要。另外,本文还将深入探讨运用AI技术…

Cocos Creator3D:发布到 Web 平台

推荐:将 NSDT场景编辑器 加入你的3D工具链 3D工具集: NSDT简石数字孪生 发布到 Web 平台 打开主菜单的 项目 -> 构建发布,打开构建发布面板。 Cocos Creator 3D 提供了两种 Web 平台的页面模板,可以通过 发布平台 的下拉菜单…

非靶代谢组学+肠道菌群测序:改善乳腺癌相关性疲劳——针灸!

文章标题: Acupuncture ameliorates breast cancer-related fatigue by regulating the gut microbiota-gut-brain axis 发表期刊:Frontiers in Endocrinology 影响因子:6.055 作者单位:河南中医药大学第一附属医院 百趣生物提…

新建项目框架详细过程(idea2021.3版本) IoC实例 DI

目录 使用Java Enterprise 一步到位 IOC、IOC容器、Bean、DI 1.IOC(Inversion of Control)控制反转 (1)什么是控制反转呢? (2)Spring和IOC之间的关系是什么呢? (3)IOC容器的作用以及内部存放的是什么? (4)当IOC容器中创建好service和…

【半监督图像分割 2023 CVPR】UniMatch

【半监督图像分割 2023 CVPR】UniMatch 论文题目:Revisiting Weak-to-Strong Consistency in Semi-Supervised Semantic Segmentation 中文题目:重新审视半监督语义分割中的强弱一致性 论文链接:https://arxiv.org/abs/2208.09910 论文代码&a…

ES6 JavaSript

爬虫组件分析 目录概述需求: 设计思路实现思路分析1.最常用的ES6特性2.let, const3.class, extends, super4.arrow function5.template string 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&a…

MTK平台的SWT异常的简单总结(3)——常见SWT/ANR类型

(1)如何查看db文件Log (2)如何确认线程关系 (3)常见类型 (A)等锁 线程状态为"Blocked",通过关键字"held by"进一步确认哪个线程拿住了锁&#xff…

一.《传奇M》装备栏遍历的突破口

寻找突破口 1.首先根据大多数游戏而言,装备栏中一般记录的是装备的对象或者装备ID,那么当我们穿装备或者脱装备肯定会有相应的值在改变 2.我们就从这里入手,当穿或脱装备的时候,使用CE搜索0然后通过改变或者未改变来筛选结果 3.接下来我们操作试一试这个思路可不可以 4.点击首…