JDBC插入数据返回数据主键代码实例

下面就是“JDBC插入数据返回数据主键”完整攻略,包含以下内容:

  1. 概述
  2. 实现步骤
  3. 示例1:直接使用Statement执行插入操作并返回主键
  4. 示例2:使用PreparedStatement预编译执行插入操作并返回主键

1. 概述

在开发中,我们经常需要在数据库中插入数据,并获取插入后的数据主键值。JDBC 提供了两种方式来执行插入操作并返回主键:直接使用 Statement 执行插入操作并返回主键值,或使用 PreparedStatement 预编译执行插入操作并返回主键值。下面分别详细说明这两种方式的实现步骤及示例。

2. 实现步骤

2.1 直接使用 Statement 执行插入操作并返回主键值

使用 Statement 执行插入操作并返回主键值的步骤如下:

  1. 创建 Connection 对象:通过DriverManager类的getConnection()方法创建数据库连接。
  2. 创建 Statement 对象:通过Connection对象的createStatement()方法创建 Statement 对象。
  3. 调用 Statement.execute() 方法插入数据:使用 SQL 语句执行插入操作,并通过 Statement.execute() 方法执行插入操作,返回 boolean 类型的结果。
  4. 获取插入后的主键值:使用 Statement.getGeneratedKeys() 方法获取插入后的主键值。

下面是示例代码:

import java.sql.*;

public class JDBCTest{
    public static void main(String[] args) throws SQLException{
        Connection conn = null;
        Statement stmt = null;
        try{
            //1. 创建 Connection 对象
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?serverTimezone=GMT%2B8", "root", "123456");

            //2. 创建 Statement 对象
            stmt = conn.createStatement();

            //3. 执行插入操作
            boolean result = stmt.execute("INSERT INTO user(username, password) VALUES('test', '123456')");

            //4. 获取插入后的主键值
            if(result){
                ResultSet rs = stmt.getGeneratedKeys();
                if(rs.next()){
                    int id = rs.getInt(1);
                    System.out.println("插入成功,主键值为:" + id);
                }
            }
        }catch(SQLException e){
            System.out.println("数据库连接错误");
        }finally{
            //关闭资源
            stmt.close();
            conn.close();
        }
    }
}

2.2 使用 PreparedStatement 预编译执行插入操作并返回主键值

使用 PreparedStatement 预编译执行插入操作并返回主键的步骤如下:

  1. 创建 Connection 对象:通过DriverManager类的getConnection()方法创建数据库连接。
  2. 创建 PreparedStatement 对象:通过Connection对象的prepareStatement()方法创建 PreparedStatement 对象。
  3. 设置参数值:使用 PreparedStatement 类的setXxx()方法设置占位符的参数值。
  4. 调用 PreparedStatement.execute() 方法插入数据:使用 SQL 语句执行插入操作,并通过 PreparedStatement.execute() 方法执行插入操作,返回 boolean 类型的结果。
  5. 获取插入后的主键值:使用 PreparedStatement.getGeneratedKeys() 方法获取插入后的主键值。

下面是示例代码:

import java.sql.*;

public class JDBCTest{
    public static void main(String[] args) throws SQLException{
        Connection conn = null;
        PreparedStatement pstmt = null;
        try{
            //1. 创建 Connection 对象
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?serverTimezone=GMT%2B8", "root", "123456");

            //2. 创建 PreparedStatement 对象,并设置占位符的参数值
            String sql = "INSERT INTO user(username, password) VALUES(?, ?)";
            pstmt = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
            pstmt.setString(1, "test");
            pstmt.setString(2, "123456");

            //3. 执行插入操作
            boolean result = pstmt.execute();

            //4. 获取插入后的主键值
            if(result){
                ResultSet rs = pstmt.getGeneratedKeys();
                if(rs.next()){
                    int id = rs.getInt(1);
                    System.out.println("插入成功,主键值为:" + id);
                }
            }
        }catch(SQLException e){
            System.out.println("数据库连接错误");
        }finally{
            //关闭资源
            pstmt.close();
            conn.close();
        }
    }
}

3. 示例1:直接使用Statement执行插入操作并返回主键

下面是示例代码,演示如何直接使用 Statement 执行插入操作并返回主键值:

import java.sql.*;

public class JDBCTest{
    public static void main(String[] args) throws SQLException{
        Connection conn = null;
        Statement stmt = null;
        try{
            //1. 创建 Connection 对象
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?serverTimezone=GMT%2B8", "root", "123456");

            //2. 创建 Statement 对象
            stmt = conn.createStatement();

            //3. 执行插入操作
            boolean result = stmt.execute("INSERT INTO user(username, password) VALUES('test', '123456')");

            //4. 获取插入后的主键值
            if(result){
                ResultSet rs = stmt.getGeneratedKeys();
                if(rs.next()){
                    int id = rs.getInt(1);
                    System.out.println("插入成功,主键值为:" + id);
                }
            }
        }catch(SQLException e){
            System.out.println("数据库连接错误");
        }finally{
            //关闭资源
            stmt.close();
            conn.close();
        }
    }
}

4. 示例2:使用PreparedStatement预编译执行插入操作并返回主键

下面是示例代码,演示如何使用 PreparedStatement 预编译执行插入操作并返回主键值:

import java.sql.*;

public class JDBCTest{
    public static void main(String[] args) throws SQLException{
        Connection conn = null;
        PreparedStatement pstmt = null;
        try{
            //1. 创建 Connection 对象
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?serverTimezone=GMT%2B8", "root", "123456");

            //2. 创建 PreparedStatement 对象,并设置占位符的参数值
            String sql = "INSERT INTO user(username, password) VALUES(?, ?)";
            pstmt = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
            pstmt.setString(1, "test");
            pstmt.setString(2, "123456");

            //3. 执行插入操作
            boolean result = pstmt.execute();

            //4. 获取插入后的主键值
            if(result){
                ResultSet rs = pstmt.getGeneratedKeys();
                if(rs.next()){
                    int id = rs.getInt(1);
                    System.out.println("插入成功,主键值为:" + id);
                }
            }
        }catch(SQLException e){
            System.out.println("数据库连接错误");
        }finally{
            //关闭资源
            pstmt.close();
            conn.close();
        }
    }
}

以上就是“JDBC插入数据返回数据主键”完整攻略,包含了两种方式分别实现插入数据并返回主键的示例代码。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JDBC插入数据返回数据主键代码实例 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • Java Apache POI报错“NullArgumentException”的原因与解决办法

    “NotOfficeXmlFileException”是Java的Apache POI类库中的一个异常,通常由以下原因之一引起: 文件格式错误:如果文件不是Office Open XML格式,则可能会出现此异常。例如,可能会尝试读取旧版的Microsoft Office文件或尝试读取其他文件类型。 以下是两个实例: 例1 如果文件格式错误,则可以尝试使用正确…

    Java 2023年5月5日
    00
  • Java实战之实现一个好用的MybatisPlus代码生成器

    首先需要明确的是,MybatisPlus是Mybatis的一个增强版本,能够大大提高开发效率。而MybatisPlus代码生成器能够自动生成基本的CRUD操作,这对于快速搭建项目是非常有帮助的。下面我将详细讲解如何实现一个好用的MybatisPlus代码生成器。 准备工作 添加MybatisPlus及其依赖到项目中。 创建数据库及数据表。(以下示例中,我们使…

    Java 2023年5月19日
    00
  • 微信小程序获取手机号的完整实例(Java后台实现)

    下面我来详细讲解“微信小程序获取手机号的完整实例(Java后台实现)”的攻略。 1. 前言 在微信小程序开发中,获取用户手机号是必不可少的一个功能,下面将会介绍如何实现微信小程序获取手机号的完整攻略,并且以两个示例说明。 2. 获取用户手机号的流程 获取用户手机号的流程分为三个步骤: 微信小程序前端获取用户手机号码加密信息(encryptedData)和加密…

    Java 2023年5月23日
    00
  • Java超详细讲解类变量和类方法

    让我来为你详细讲解“Java超详细讲解类变量和类方法”的完整攻略。 什么是类变量和类方法? 在Java中,类变量和类方法都属于类级别的,也叫做静态成员。静态成员是和类直接关联的,而不是和对象实例关联的,可以通过类名来访问。类变量也叫做静态变量,它是指被 static 修饰的变量。类方法也叫做静态方法,它是指被 static 修饰的方法。 类变量的使用 类变量…

    Java 2023年5月26日
    00
  • java — 线程(二)

    死锁 死锁是指两个或两个以上的线程在执行过程中,由于竞争同步锁而产生的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的线程称为死锁。 死锁的案例 : 同步代码块的嵌套创建锁对象: public class Lock { public static final Lock lockA = new L…

    Java 2023年4月17日
    00
  • 一篇文章带你了解Java Spring基础与IOC

    一篇文章带你了解Java Spring基础与IOC 什么是Java Spring? Java Spring是一个轻量级的开源Java框架,它被广泛地应用于企业级Java应用开发中。它提供了一系列的工具和框架来帮助开发者构建易于维护和易于扩展的Web应用或企业应用。 Java Spring的核心特点包括: 依赖注入(DI)和控制反转(IoC)模式 面向切面编程…

    Java 2023年5月19日
    00
  • Spring配置动态数据源实现读写分离的方法

    下面是Spring配置动态数据源实现读写分离的方法的完整攻略。 什么是动态数据源? 动态数据源是指可以在应用程序运行时动态地切换不同的数据源,以便满足应用程序的需求。在实际应用程序中,常见的用途是实现数据库读写分离,将读操作分配到只读数据库,将写操作分配到主数据库。 实现步骤 引入依赖 在 pom.xml 中添加以下依赖: <dependency&gt…

    Java 2023年5月20日
    00
  • 一个Java线程的线生(线生 vs 人生)

    java线程的使用 1. Java多线程概述 下面我们看下Java的多线程 作者: 博学谷狂野架构师 GitHub:GitHub地址 (有我精心准备的130本电子书PDF) 只分享干货、不吹水,让我们一起加油!? 1.1 java天生就是多线程的 一个Java程序从main()方法开始执行,然后按照既定的代码逻辑执行,看似没有其他线程参与,但实际上Java程…

    Java 2023年4月18日
    00
合作推广
合作推广
分享本页
返回顶部