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();
         }
 
     }
 
}

猜你喜欢

转载自www.cnblogs.com/max-hou/p/10701835.html