zoukankan      html  css  js  c++  java
  • JDBC 返回主键

    转载至:https://www.liyongzhen.com/

    上一节课里我们学习通过PreparedStatement对象执行带参数的查询SQL和修改SQL。

    这节课我们学习使用 PreparedStatement对象执行插入SQL,并且返回主键。

    要返回主键,有一个前提,就是数据库表必须有主键自增。

    下面的代码演示了执行插入SQL并返回主键的用法。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    String sql = "INSERT INTO products(`ProductName`,`SupplierID`,`CategoryID`,`Unit`,`Price`)VALUES(?,?,?,?,?);";
    PreparedStatement statement =
       connection.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS); //加入参数Statement.RETURN_GENERATED_KEYS
    statement.setString(1, "milk"); //设置参数……
    statement.setLong(2, 16);
    statement.setLong(3, 1);
    statement.setString(4, "500ml");
    statement.setBigDecimal(5, new BigDecimal(5.6));
    int value = statement.executeUpdate();
     
    System.out.println("受影响的记录数 "+value);
     
    int id = 0;
    ResultSet rs = statement.getGeneratedKeys();  //得到生成的主键,主键放在ResultSet对象里
    if(rs.next()){ //提取主键值
        id = rs.getInt(1);
    }
     
    System.out.println("主键 "+id);

    关键技术:

    1. 在创建PreparedStatement对象时,指定一个常量Statement.RETURN_GENERATED_KEYS,表示有返回主键的能力。
    2. 执行SQL语句时,仍然调用executeUpdate()方法。另外要调用getGeneratedKeys()方法,返回ResultSet对象。 ResultSet对象是结果集,存储查询结果,主键就保存在这里。
    3. 第三步,从ResultSet对象里提取主键。

    完整代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    import java.math.BigDecimal;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
     
    public class Insert {
     
        public static void main(String[] args) {
            String url = "jdbc:mysql://127.0.0.1:3306/northwind";
            String user = "northwind";
            String password = "northwind";
     
            try (Connection connection = DriverManager.getConnection(url, user, password)) {
     
                String sql = "INSERT INTO products(`ProductName`,`SupplierID`,`CategoryID`,`Unit`,`Price`)VALUES(?,?,?,?,?);";
                PreparedStatement statement = connection.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
                statement.setString(1, "milk");
                statement.setLong(2, 16);
                statement.setLong(3, 1);
                statement.setString(4, "500ml");
                statement.setBigDecimal(5, new BigDecimal(5.6));
                int value = statement.executeUpdate();
                 
                System.out.println("受影响的记录数 "+value);
                 
                int id = 0;
                ResultSet rs = statement.getGeneratedKeys();
                if(rs.next()){
                    id = rs.getInt(1);
                }
                 
                System.out.println("主键 "+id);
     
                rs.close();
                statement.close(); // 关闭statement,释资源
     
            } catch (SQLException e) {
                e.printStackTrace();
            }
     
        }
     
    }
  • 相关阅读:
    webpackHotMiddleware改造成koa支持的中间件
    webpack-dev-middleware改造成koa中件间
    Vue3学习笔记
    当前工程中typescritpt依赖包与依赖包中依赖包类型不一致如何解决
    typescript中使用Object.keys
    获取东8区时间
    SyntaxError: Invalid regular expression: invalid group specifier name
    测试代码框
    ST Lab2 Selenium
    ST HW3
  • 原文地址:https://www.cnblogs.com/max-hou/p/10701835.html
Copyright © 2011-2022 走看看