从刚刚插入的自增型主键表中获取主键
user表有如下列(userid,regtime,flag,loginname,powerstr,password,usertype,lasttime,secondpwd)
数据库是sqlserver 2000。
代码如下:
Connection con = Conn.getConn();
PreparedStatement ptmt = null;
ResultSet rs = null;
int userid = -1;//获取s_user中插入数据的自增型主键用户编号userid
String sql ="insert into user(regtime,flag,loginname,powerstr,password,usertype,lasttime,secondpwd) values(?,?,?,?,?,?,?,?)";
try{
ptmt = con.prepareStatement(sql);
ptmt.setString(1, regtime);
ptmt.setInt(2, flag);
ptmt.setString(3, loginname);
ptmt.setString(4, powerstr);
ptmt.setString(5, password);
ptmt.setInt(6, userType);
ptmt.setString(7, lasttime);
ptmt.setString(8, secondpwd);
if(ptmt.executeUpdate() > 0){
ptmt = con.prepareStatement("Select @@identity as userid");
//ptmt = con.prepareStatement(sql);
rs = ptmt.executeQuery();
System.out.println("插入s_user表成功!!");
if(rs.next()){
userid = rs.getInt("userid");
System.out.println(userid);
};
}
}catch(SQLException e){
e.printStackTrace();
}finally{
try{
ptmt.close();
con.close();
}catch(SQLException e){
e.printStackTrace();
}
}
结果是那个userid输出是0,这应该是有问题的。小弟菜鸟,望各位大侠帮助。
[解决办法]
Select @@identity as userid
这个是不可靠的,建议不使用。
可以这样
Connection conn = getConnection(); String sql = "insert into useres (name) values ('101')"; Statement smt = conn.createStatement(); smt.executeUpdate(sql); ResultSet rs = smt.getGeneratedKeys(); int lastid = 0; if(rs.next()){ lastid = System.out.println(rs.getInt(1)); } conn.close();