我有两种方法,一种是将数据插入数据库,另一种是删除它们。假设我添加了3行id=1,id=2,id=3。现在我决定删除最后一行,再插入一行。因此,我得到了三行ids为1,2,4,而不是三行ids为1,2,3。我怎样才能解决这个问题?
private void insert() throws SQLException {
String query = "INSERT INTO users (username, email, password, user_group_id) VALUES (?, ?, ?, ?);";
PreparedStatement sql = Boot.getCon().prepareStatement(query, Statement.RETURN_GENERATED_KEYS);
sql.setString(1, username);
sql.setString(2, email);
sql.setString(3, password);
sql.setInt(4,user_group_id);
sql.executeUpdate();
}
public static void delete(int id) throws SQLException {
String query = "DELETE FROM users where id=?;";
PreparedStatement statement = Boot.getCon().prepareStatement(query);
statement.setInt(1,id);
statement.executeUpdate();
System.out.println("You have deleted 1 row");
}
3条答案
按热度按时间f45qwnt81#
当您删除数据库中的永久性时,您将确保在您的标识种子中创建间隙。解决方案通常使用已删除标志,1=已删除。如果您不能创建间隙(合规性原因),请考虑更新已删除的列,而不是硬删除。
可以使用以下查询更改标识种子:
选择最后一个插入id(); 设置标识=4;
标识种子是增量的,将标识种子设置为低于最大值将不起作用。
1rhkuytd2#
这本来就不是问题,这就是自动增量的工作原理。。。如果你想解决它,那么你必须做一些更多的编码,我可以告诉你一些想法,如果你不懒惰和兴趣。
从索引中删除自动增量,生成一个名为id的列,只需将其设置为int类型,然后生成如下函数:
就像每次你插入一个新的记录,你只要调用这个函数并对它加1。希望你喜欢。
pinkon5k3#
这看起来不是问题,这是预期的行为。你的密码很好。
我相信你在后台使用了一些序列来分配ID。每次插入时,序列值将递增1。
如果删除任何行,该id将不会再次使用。