在上星期完成的登录界面上发现了一个问题,如果注册帐号由于用户名已存在等问题注册不成功,即账户密码数据并未添加到数据库中,但设置的自增字段id还是会自动增加,这就导致了在下一次注册成功后id字段会出现不连续的问题,删除数据后也导致id不连续。

在API上看了一遍PreparedStatement,发现没有相应的方法,倒是在网上了找到了几个方法,但试了之后也都没起效果,不过最后还是找到了一条MySQL的语句来实现
ALTER TABLE table AUTO_INCREMENT =1;
执行之后,不一定再插入的id就是1,而是表中id最大值+1。
每次执行需要和操作语句一起执行
eg:
alter table login AUTO_INCREMENT = 1;
insert into login(user_name,password) values ('aaaa', md5(123123));

到这里,问题就变的异常简单了:在每次插入之后都重置AUTO_INCREMENT的值。
但是这样又会引出一个问题,java语句中调用sql语句每次只能写一条:
pStatement = connection.prepareStatement("insert into login(user_name,password) values(?, ?)");
为了保证两条语句同时执行必须将sql语句在一个对象中,即
pStatement = connection.prepareStatement("alter table login AUTO_INCREMENT=1; insert into login(user_name,password) values(?, ?)");
但这样写的话就会出现MySQL语法报错,又查找了一番之后找到了一个最为简单的解决办法:在MySQL的连接字符串中设置allowMultiQueries参数置为true,允许MySQL批量更新。在jdbc下设置连接字符串的时候加上&allowMultiQueries=true,即可完成MySQL的批量更新。这样几个问题就都得到解决了。
网友评论