NipGeihou's blog NipGeihou's blog
  • Java

    • 开发规范
    • 进阶笔记
    • 微服务
    • 快速开始
    • 设计模式
  • 其他

    • Golang
    • Python
    • Drat
  • Redis
  • MongoDB
  • 数据结构与算法
  • 计算机网络
  • 应用

    • Grafana
    • Prometheus
  • 容器与编排

    • KubeSphere
    • Kubernetes
    • Docker Compose
    • Docker
  • 组网

    • TailScale
    • WireGuard
  • 密码生成器
  • 英文单词生成器
🍳烹饪
🧑‍💻关于
  • 分类
  • 标签
  • 归档

NipGeihou

我见青山多妩媚,料青山见我应如是
  • Java

    • 开发规范
    • 进阶笔记
    • 微服务
    • 快速开始
    • 设计模式
  • 其他

    • Golang
    • Python
    • Drat
  • Redis
  • MongoDB
  • 数据结构与算法
  • 计算机网络
  • 应用

    • Grafana
    • Prometheus
  • 容器与编排

    • KubeSphere
    • Kubernetes
    • Docker Compose
    • Docker
  • 组网

    • TailScale
    • WireGuard
  • 密码生成器
  • 英文单词生成器
🍳烹饪
🧑‍💻关于
  • 分类
  • 标签
  • 归档
  • 【Java】MySQL8 JDBC executeUpdate后取主键经验之谈

    • 需求
      • 网上教程代码
        • 输出结果
        NipGeihou
        2019-03-25
        Java
        目录

        【Java】MySQL8 JDBC executeUpdate后取主键经验之谈

        相同情况的文章 (opens new window)

        版本说明:

        MySQL: 8.0.15

        Java JDK: 11

        mysql-connector-java: 8.0.15

        # 需求

        插入数据库后返回主键 ID

        # 网上教程代码

        //(代码经过敏感处理)
            Class.forName("com.mysql.cj.jdbc.Driver");
            Connection conn = DriverManager.getConnection(
                    "jdbc:mysql://127.0.0.1:3306/xxxxxx?useSSL=false&serverTimezone=UTC", "****", "***");
            
            String sql = "INSERT INTO openorders (a,b,c,d)	VALUES	(?, ?, ?, ?)";
            PreparedStatement preparedStatement = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
            
            preparedStatement.setString(1, a);
            preparedStatement.setDouble(2, b);
            preparedStatement.setDouble(3, c);
            preparedStatement.setDouble(4, d);
        
            //返回生成的id
            preparedStatement.executeUpdate();
            ResultSet generatedKeys = preparedStatement.getGeneratedKeys();
        
            if (generatedKeys.next()) {
                System.out.println(generatedKeys.getInt("id"));//关键
            }
        
            generatedKeys.close();
            preparedStatement.close();
            conn.close();
        

        # 输出结果

        然而,在我的运行环境下,会报错提示 Column 'id' not found.

        在一顿摸索后,发现 generatedKeys 返回的字段名为 GENERATED_KEY ,而不是 id ,因此使用

            generatedKeys.getInt("GENERATED_KEY");
            generatedKeys.getInt(1);
        

        是可以返回主键的,具体原因暂时未知,未知是否与高版本的 MySQL、JDK 有关,但有多年前的文章也提到这个问题。

        #Java
        上次更新: 2022/01/05, 22:36:44
        最近更新
        01
        Docker Swarm
        04-18
        02
        安全隧道 - gost
        04-17
        03
        Solana最佳实践
        04-16
        更多文章>
        Theme by Vdoing | Copyright © 2018-2025 NipGeihou | 友情链接
        • 跟随系统
        • 浅色模式
        • 深色模式
        • 阅读模式