JDBC 获取自动生成的主键
在我们设置设计表时,会设置主键,自动增长的主键
有时候我们插入数据时,要想知道我们生成的主键是多少
需求场景
- 用户注册时,添加用户名,密码后,插入到数据库当中
- 跳转成完善个人信息页
1. 完善信息更新到刚插入的那个记录当中,所以要获取刚插入的那个主键是多少
2. 不能使用用户名来做条件,用户名有重名情况
3. 所以插入完后,就应该获取刚插入的那个主键
示例图
传统方法Statement,执行语句时传入参数Statement.RETURN_GENERATED_KEYS
package com.iris.jdbc.test;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import com.iris.jdbc.util.JDBCUtil;
public class GenerateTest {
public static void main(String[] args) throws Exception {
Connection conn = JDBCUtil.getConn();
String sql = "insert into student (name,age) values('张三',30)";
Statement st = conn.createStatement();
//设置可获取主键
st.executeUpdate(sql,Statement.RETURN_GENERATED_KEYS);
//获取自动生成的id
ResultSet res = st.getGeneratedKeys();
if(res.next()) {
int id = res.getInt(1);
System.out.println(id);
}
JDBCUtil.close(conn, st, res);
}
}
使用预编译语言的方法,创建语句时传入参数Statement.RETURN_GENERATED_KEYS
package com.iris.jdbc.test;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import com.iris.jdbc.util.JDBCUtil;
public class GenerateTest {
public static void main(String[] args) throws Exception {
Connection conn = JDBCUtil.getConn();
String sql = "insert into student (name,age) values(?,?)";
//设置可获取主键
PreparedStatement ps = conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
ps.setString(1, "李四");
ps.setInt(2, 14);
ps.executeUpdate();
//获取自动生成的id
ResultSet res = ps.getGeneratedKeys();
if(res.next()) {
int id = res.getInt(1);
System.out.println(id);
}
JDBCUtil.close(conn, ps, res);
}
}