0

ID 番号を自動的に機能させることができないため、データベースの ID 番号を手動で増やしています。これはプロジェクト用であり、自動的に機能しなくても問題ありません。後で試して解決できます。

resultSet で最小の空き ID 番号をチェックするメソッドを作成しています。最も低い値は、登録時にユーザーに与えられる availableId と呼ばれる整数として設定されます。

これは私がこれまで読んだことから得たものです:

http://docs.oracle.com/javase/6/docs/api/java/sql/ResultSet.html http://wiki.netbeans.org/GetStartedwithJavaDB

例として、これらは私のデータベース内の私の ID です。

/,2,/,4,5,6,/,8,9

これらのユーザーがアカウントを削除したため、1、3、および 7 が欠落しています。たとえば、他のユーザーを入力する前に番号 1 を入力すると、次のユーザーは番号 3 として登録されます。

public int getAvailableId() {
    int availableId = 1;
    try {
        String stmt = "select PID from APP.PERSON";
        PreparedStatement ps = Main.getPreparedStatement(stmt);
        ResultSet rs = ps.executeQuery();
        while (rs.next()) {
            int n = rs.getInt(1);
            int n2 = rs.next().getInt(1);

            if (!(n == 1)) {
                return availableId;
            } else if (!(n2-- == n)) {
                availableId = n++;
            }
        }
        rs.close();
        ps.close();
    } catch (Exception e) {
        System.out.println(e);
    }
    return availableId;
}

ここで 2 つの問題:

  1. rs.next()ブール値を返しますが、n2 に次の行の整数の値を保持させたい - ここからこれを行うメソッドが見つかりません - http://docs.oracle.com/javase/6/docs/api /java/sql/ResultSet.html
  2. すべてをループして、可能な限り最小の空き ID 番号を見つける方法がわかりません。

ごみコードを許してください!私は進むにつれて多くのことを学んでおり、これは1つには悪い習慣であり、2つにはコードが良くないことを理解しています。

どうすればこれを行うことができますか?

4

1 に答える 1

1

あなたのコードは少し間違っています。これを変更する必要があります:

rs.next().getInt(1);

ただするには:

rs.getInt("PID");

rs.next()は 2 つのことを行います。次の行がある場合は true を返し、次の行を指すように結果セット カーソルを移動します。

次の行がない場合は false が返されるため、ループから抜け出します。

呼び出すgetIntと、現在の行から int を取得しようとします。ご覧のとおりrs.next()、ループ条件では毎回次の行に移動します。


この場合も宣言する必要があります

int nループの外側。

次にn = n2、各ループ反復の最後に割り当てます。

このようなもの:

    int n = 0;
    while (rs.next()) {

        int n2 = rs.getInt(1);

        if (!(n == 1)) {
            return availableId;
        } else if (!(n2-- == n)) {
            availableId = n++;
        }

        n = n2;
    }

やりたいことを正確に実行するには、いじる必要があるかもしれません。


私の最後のコメントは、可能な限り最小の空き ID 番号を取得しようとするのではなく、SQL MAX() などを使用してデータベースから最大の番号を取得し、1 を追加するだけです。

于 2013-02-15T15:48:13.283 に答える