0

我正在 NetBeans (java) 中制作应用程序。此应用程序具有字符串和整数的唯一 id 组合,如abc/111orxyz/253并且整数部分应在数据库中出现新条目时增加,即abc/112xyz/254

问题是整数部分的值会增加,直到它以适当的方式达到 10,但之后它不会增加并且对于数据库中的进一步条目保持不变。

我使用了以下代码 -

try{
    String sql = "SELECT RegNumber FROM Death ORDER BY RegNumber DESC   ";
    pst = conn.prepareStatement(sql);

    rs = pst.executeQuery();

    if (rs.next()) {

        String add1 = rs.getString("RegNumber");
        String[] parts= add1.split("/");
        String part1= parts[0];
        String part2= parts[1];
        int a,b;
        a= Integer.parseInt(part2);
        b=a+1;

        jTextField20.setText(""+part1+"/"+b);


        JOptionPane.showMessageDialog(null, "done");
    }
   }

整数部分增加到 10 ”意味着如果我在数据库中开始 id 的第一个值,abc/1那么新的 id 会自动为下一个条目生成增加值 1 ,abc/2对于下一个条目,它是这样abc/3的,依此类推: abc/4, ...,abc/10

但是当它达到abc/10新生成的 id 时,它仍然是相同的,即abc/10对于数据库中的每个新条目。(我使用的是 MS Access 2007 并且idtext类型)。数据库中的第一个 id 是由应用程序自己创建的。

如果有人有另一种生成方法id,请告诉我。

4

2 回答 2

3

问题是

String sql = "SELECT RegNumber FROM Death ORDER BY RegNumber DESC   ";

将按字母降序排序,按字母顺序排列

"abc/9" > "abc/10"

这就是为什么你的程序总是一遍又一遍地获取 9 ......

我认为您必须拆分该列进行存储,并将数字部分作为实际数字类型存储在数据库中。这可能并不像听起来那么难,您总是可以对 2 个字段进行排序

String sql = "SELECT RegNumber FROM Death ORDER BY RegString DESC, RegNumber DESC   ";

您还可以考虑SERIAL在某些情况下(即如果 RegNumber 未重置,例如当字符串部分更改时)为 RegNumber 部分使用(自动增量)数据类型,以进一步简化您的插入逻辑。

于 2012-07-11T23:18:19.683 回答
2

您的选择查询按 desc 顺序对条目进行排序,这些条目是 Varchar 类型“SELECT RegNumber FROM Death ORDER BY RegNumber DESC”

这意味着在将其获取值排序为 abc/9、abc/8、abc/7、abc/6、abc/5、abc/4、abc/3、abc/2、abc/10、abc/1 之后。

这意味着第一个 id 总是 9,这意味着下一个值总是 10。

于 2012-07-11T23:21:02.693 回答