Java: проверка автоматически сгенерированного идентификатора - PullRequest
0 голосов
/ 24 мая 2011

Моя Java-программа добавляет элементы в базу данных.У меня есть код для генерации случайной строки, которая будет использоваться в качестве идентификатора элемента.Я хочу сделать IDchecker (id), который будет проверять, существует ли идентификатор в базе данных.

Если у меня есть методы codeIDgenerator () и IDchecker (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)

public boolean CheckID(String ID) throws SQLException {
    String query = "SELECT itemId FROM items WHERE itemID= '"+ID+"'";
    Statement dbStatement = connection.createStatement();
    ResultSet rsItems= dbStatement .executeQuery(query);
        if (rsItems.isEmpty( )== true){
            return false;
            // ID not found - is unique
        } else{
        return true;
            // ID found - is not unique
        }
}

Спасибо

1 Ответ

0 голосов
/ 24 мая 2011

Хотя создание уникального идентификатора лучше всего выполнять в вашей базе данных, я могу помочь вам упростить ваш код.Вам не нужно проверять базу данных дважды.

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);
    }
}

Однако вместо генерации случайного идентификатора вы можете просто получить следующий идентификатор.

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);
    }
}
...