INSERT返回主键ID

同学们在对数据进行新增操作时,通常我们是执行如下代码:


public int Insert(UserPo t) {
// TODO Auto-generated method stub
	int count=0;
	try {
		con = DbUtil.getConnection();
		ps=con.prepareStatement(Insert);
		ps.setString(1, t.getUser_name());
		ps.setString(2, t.getUser_password());
		ps.setInt(3, t.getUser_sex());
		ps.setInt(4, t.getUser_age());
		count = ps.executeUpdate();
	} catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} finally{
		DbUtil.close(con, ps, rs);
	}
	return count;
}

count是个int型的数据,executeUpdate方法返回的是数据库数据更新数,然后我们就可以通过count的值来判断插入数据是否成功。那如果我们想要得到刚刚INSERT插入后生成的主键ID来进行下一步操作呢?

在INSERT插入数据后,想要获得刚插入记录的ID,可以利用JDBC的getGeneratedKeys获得该主键ID。这里我用MySQL数据库为例,使用的是int类型的主键。

public int Insert(UserPo t) {
	int id=0;
	try {
		con = DbUtil.getConnection();
		ps=con.prepareStatement(Insert,Statement.RETURN_GENERATED_KEYS);

这里要注意一下,有没有发现和之前的方法有不一样的地方?在con.prepareStatement方法中写sql语句的时候,需要在sql后面加上 Statement.RETURN_GENERATED_KEYS ,Statement引用的是java.sql.Statement

INSERT返回主键ID_第1张图片

		ps.setString(1, t.getUser_name());
		ps.setString(2, t.getUser_password());
		ps.setInt(3, t.getUser_sex());
		ps.setInt(4, t.getUser_age());
		ps.execute();

然后就是这里执行的是execute()方法,而不是executeUpdate()

		rs=ps.getGeneratedKeys();	
		while(rs.next()){
			id=rs.getInt(1);
		}

使用getGeneratedKeys()方法取得ResultSet对象,之后就可以得到返回的主键ID了。

	} catch (SQLException e) {
		// TODO Auto-generated catch block
			e.printStackTrace();
		} finally{
			DbUtil.close(con, ps, rs);
		}
		return id;
	}

那么就会有同学发现问题了,这个方法好像SQL Server不可用?出现了方法不支持的错误提示:

java.lang.UnsupportedOperationException
INSERT返回主键ID_第2张图片

SQL Server的sql语句是可以自带返回新产生的主键ID
INSERT返回主键ID_第3张图片
INSERT返回主键ID_第4张图片

果然是这样,接下来就可以依葫芦画瓢,在sql语句后面拼接 select @@indentity

	ps=con.prepareStatement(Insert+" select @@identity");

之后用ResultSet接收返回的结果集,按照刚才的测试,结果集里应该就只有一个字段,那就是主键ID。然后通过getInt(1)来得到这个主键ID

	rs=ps.executeQuery();
	while(rs.next()){
		id=rs.getInt(1);
		System.out.println(id);
	}

在这里插入图片描述
INSERT返回主键ID_第5张图片

你可能感兴趣的:(专题技术文献)