我在我的表中使用user_id列,并在每次注册新用户时将其递增1。但是在U10之后,useId 没有增加,之后每个新用户都有userId U10。我正在使用MySql请建议如何解决此问题,或以任何其他方式实现此目的。
下面是我生成 userId
的代码 public int addUser(UserTO uto){
int status=0;
PreparedStatement ps1=null;
PreparedStatement ps2=null;
PreparedStatement ps3=null;
Connection con=DBUtil.getMySqlConnection();
String new_user_id=null;
try{
ps1=con.prepareStatement("select user_id from users order by user_id");
ResultSet rs1=ps1.executeQuery();
if(rs1.last()){
int id=Integer.parseInt((rs1.getString(1).substring(1)));
new_user_id="U"+(id+1);
}
else{
new_user_id="U1";
}
uto.setUserid(new_user_id);
ps3=con.prepareStatement("insert into users values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
ps3.setString(1,uto.getUserid());
ps3.setString(2,uto.getType());
ps3.setString(3,uto.getUsername());
ps3.setString(4,uto.getPassword());
ps3.setString(5,uto.getFirstname());
ps3.setString(6,uto.getMiddlename());
ps3.setString(7,uto.getLastname());
ps3.setString(8,uto.getPhone());
ps3.setString(9,uto.getFax());
ps3.setString(10,uto.getEmail());
ps3.setString(11,uto.getJobtitle());
ps3.setString(12,uto.getDepartment());
ps3.setString(13,uto.getCompanyname());
ps3.setString(14,uto.getLocation());
ps3.setString(15,uto.getGender());
ps3.setString(16,uto.getClientid());
status=ps3.executeUpdate();
}catch(Exception e){
e.printStackTrace();
}finally{
DBUtil.cleanup(ps1,con);
DBUtil.cleanup(ps2,con);
DBUtil.cleanup(ps3,con);
}
return status;
}
答案 0 :(得分:0)
我认为这可能与你在这行中为字符串添加整数这一事实有关但我不确定,我对java不太了解:
new_user_id="U"+(id+1);
但是,您可以跳过第一个查询并在随后的INSERT查询中生成user_id,所有这些都使用SQL。像
这样的东西INSERT INTO users VALUES(CONCAT("U", IFNULL(MAX((SELECT CAST(SUBSTRING(user_id, 2) AS UNSIGNED) FROM users)), 0) + 1), ?, ?, ?....
如果你这样做,你应该删除你为该查询绑定的第一个参数。
我不会问为什么你没有为用户主要ID使用AUTO_INCREMENT。