Java:自動生成されたIDを確認する

java sql unique
Java:自動生成されたIDを確認する

私のJavaプログラムは、データベースにアイテムを追加します。 アイテムIDとして使用されるランダムな文字列を生成するコードがあります。 IDがデータベースに既に存在するかどうかをチェックするIDchecker(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)メソッドです

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

ありがとう

  0  0


ベストアンサー

一意のIDの生成はデータベースで行うのが最適ですが、コードの簡素化を支援できます。 データベースを2回チェックする必要はありません。

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

0


タイトルとURLをコピーしました