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

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

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

这节课我们学习使用 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();          }        }   }

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄