String sql = "insert into person (name,pwd,sex,age,email,loves) values(?,?,?,?,?,?)"
Connection conn = DbUtil.getConnection()
PreparedStatement pst = conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS)
pst.setString(1, p.getName())
pst.setString(2, p.getPwd())
pst.setString(3, p.getSex())
pst.setInt(4, p.getAge())
pst.setString(5, p.getEmail())
StringBuffer loves = new StringBuffer("")
//将爱好信息拼成字符串
for(String s:p.getLoves()){
loves.append(s)
loves.append(",")
}
//如果用户没选择爱好,则写入""
if(loves.length()>0){
loves.substring(0, loves.length()-1)
pst.setString(6, loves.toString())
}else{
pst.setString(6,"")
}
pst.executeUpdate()
ResultSet rs = pst.getGeneratedKeys()
rs.next()
int id = rs.getInt(1)
p.setId(id)
DbUtil.closeConnection(conn)
}
使用下面的查询语句可以返回你需要的ID:SELECT LAST_INSERT_ID()
说明,即使是在并行的时候,多个程序都在插入,仍然能获得自己的ID,因为每个连接的会话号是不同的。
可以直接返回这个数到程序里面处理,也可以直接作为插入关联表的字段值,例如:
INSERT INTO user(name) VALUES ('xxx')//有自动生成UID
INSERT INTO user_birth(uid,birth) VALUES(LAST_INSERT_ID(), '1972-9-18')//向生日表插入刚才新用户的生日
用 @@IDENTITYDECLARE @Res INT OUTPUT
你要定义一个OUTPUT的函数,
当插入数据之后,加上一个 SET @Res =@@IDENTITY
C#程序里用 取@Res 这个参数就得到了这个 最后一次插入的ID值了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)