如何从Java代码创建数据库ID?

时间:2013-02-15 15:46:04

标签: java oracle resultset javadb

我手动递增我的数据库中的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;
}

这里有两个问题:

  1. rs.next()返回一个布尔值,但是我希望n2在下一行中保存整数的值 - 我找不到从这里执行此操作的方法 - http://docs.oracle.com/javase/6/docs/api/java/sql/ResultSet.html
  2. 我无法弄清楚如何遍历所有内容以找到尽可能低的免费ID号。
  3. 请原谅垃圾代码!随着我的进展,我学到了很多东西,我明白这对于一两个代码来说不是很好。

    我该怎么做呢?

1 个答案:

答案 0 :(得分:1)

您的代码有点不对劲。这需要改变:

rs.next().getInt(1);

只是:

rs.getInt("PID");

rs.next()做了两件事。如果存在下一行,则返回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。