我在NetBeans(java)中创建一个应用程序。此应用程序具有字符串和整数(如abc/111
或xyz/253
)的唯一ID组合,并且整数部分应在数据库中发生新条目时增加,即abc/112
和xyz/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 ”意味着如果我在abc/1
这样的数据库中启动id的第一个值,那么新的id会自动为下一个条目生成,其值增加1是abc/2
,下一个条目是abc/3
,依此类推连续顺序,如下所示:abc/4
,...,abc/10
但是当它达到abc/10
时,新生成的id对于数据库中的每个新条目保持相同,即abc/10
。 (我正在使用MS Access 2007,而id
属于text
类型)。数据库中的第一个id由应用程序本身创建。
如果有人有其他选择来生成id
,请告诉我。
答案 0 :(得分: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 ";
在某些情况下,您还可以考虑对RegNumber部分使用SERIAL
(自动增量)数据类型(例如,如果不重置RegNumber,例如当字符串部分发生更改时),以进一步简化插入逻辑。
答案 1 :(得分: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。