Java:检查自动生成的ID

Java:检查自动生成的ID,java,sql,unique,Java,Sql,Unique,我的Java程序将项目添加到数据库中。我有一个生成随机字符串的代码,该字符串将用作项目ID。我想制作一个IDchecker(ID),用于检查数据库中是否已经存在该ID 如果我有codeIDgenerator()和IDchecker(id)方法,我如何创建一个循环,在id已经存在时生成新代码,或者在id唯一且未出现在数据库中时退出循环 我的IDchecker(id)方法也有问题,我使用ResultSet从SQL中返回数据,但是我找不到一种方法来确定ResultSet有多少行(如果有的话)。resu

我的Java程序将项目添加到数据库中。我有一个生成随机字符串的代码,该字符串将用作项目ID。我想制作一个IDchecker(ID),用于检查数据库中是否已经存在该ID

如果我有codeIDgenerator()和IDchecker(id)方法,我如何创建一个循环,在id已经存在时生成新代码,或者在id唯一且未出现在数据库中时退出循环

我的IDchecker(id)方法也有问题,我使用ResultSet从SQL中返回数据,但是我找不到一种方法来确定ResultSet有多少行(如果有的话)。resultSet没有isEmpty()

代码如下:

public void AddItem() {
    boolean checkCode = false;
    while (checkCode == false) {
        Random r = new Random();
        int numbers = 100000 + (int) (r.nextFloat() * 899900);
        String ID= Integer.toString(numbers);
        try {
            if (DatabaseConnection.checkID(ID) == false) {
                checkCode = true;
                System.out.println("ID is unique");
            } else if (DatabaseConnection.checkID(ID) == true) {
                System.out.println("ID is NOT unique");
            }
        } catch (SQLException ex) {
            Logger.getLogger(ModelTabeleIntervencija.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
这里是ckeckID(ID)方法


谢谢

虽然生成唯一id最好在数据库中完成,但我可以帮助您简化代码。您不需要检查数据库两次

private final Random r = new Random();
public String getUniqueId() {
    try {
        while (true) {
            int n = r.nextInt(1000 * 1000) + 1000 * 1000;
            String id = ("" + n).substring(1); // number between 000000 and 999999
            if (DatabaseConnection.checkID(id))
                return id;
        }
    } catch (SQLException ex) {
        throw new IllegalStateException("Cannot access database", ex);
    }
}
但是,您可以只获取下一个id,而不是生成随机id

public String getUniqueId() {
    try {
        String maxId = DatabaseConnection.selectMaxId();
        int n = Integer.parseInt(maxId) + 1;
        return ("" + n).substring(1); // number between 000000 and 999999
    } catch (SQLException ex) {
        throw new IllegalStateException("Cannot access database", ex);
    }
}

大多数RDBMS实现都有一些自动递增列的机制(例如,SQL Server中的
IDENTITY
,MySQL中的
auto_INCREMENT
)。我会研究这个选择,而不是试图在这里推出你自己的解决方案;不需要重新发明轮子。说到这里,你应该研究一下ORM(例如Hibernate),这样你就不必担心有人已经想到并处理过的所有这些情况。我是Java初学者,我不知道什么是RDBMS或ORM?我刚刚添加了一个列表,其中填充了结果集中的条目。在List.isEmpty()中,我可以很容易地看到查询是否有任何结果。RDBMS是一个关系数据库。谷歌会在上面找到数百万页。这是一项最好由数据库而不是Java来完成的功能。@Luka:RDBMS是运行SQL查询的数据库。
public String getUniqueId() {
    try {
        String maxId = DatabaseConnection.selectMaxId();
        int n = Integer.parseInt(maxId) + 1;
        return ("" + n).substring(1); // number between 000000 and 999999
    } catch (SQLException ex) {
        throw new IllegalStateException("Cannot access database", ex);
    }
}