日期:2014-05-17  浏览次数:20589 次

从刚刚插入的自增型主键表中获取主键
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

这个是不可靠的,建议不使用。

可以这样

Java code
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();