Java:检查自动生成的ID
我的Java程序将项目添加到数据库中。我有一个生成随机字符串的代码,该字符串将用作项目ID。我想制作一个IDchecker(ID),用于检查数据库中是否已经存在该ID 如果我有codeIDgenerator()和IDchecker(id)方法,我如何创建一个循环,在id已经存在时生成新代码,或者在id唯一且未出现在数据库中时退出循环 我的IDchecker(id)方法也有问题,我使用ResultSet从SQL中返回数据,但是我找不到一种方法来确定ResultSet有多少行(如果有的话)。resultSet没有isEmpty() 代码如下:Java:检查自动生成的ID,java,sql,unique,Java,Sql,Unique,我的Java程序将项目添加到数据库中。我有一个生成随机字符串的代码,该字符串将用作项目ID。我想制作一个IDchecker(ID),用于检查数据库中是否已经存在该ID 如果我有codeIDgenerator()和IDchecker(id)方法,我如何创建一个循环,在id已经存在时生成新代码,或者在id唯一且未出现在数据库中时退出循环 我的IDchecker(id)方法也有问题,我使用ResultSet从SQL中返回数据,但是我找不到一种方法来确定ResultSet有多少行(如果有的话)。resu
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)方法
谢谢虽然生成唯一id最好在数据库中完成,但我可以帮助您简化代码。您不需要检查数据库两次
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);
}
}
大多数RDBMS实现都有一些自动递增列的机制(例如,SQL Server中的
IDENTITY
,MySQL中的auto_INCREMENT
)。我会研究这个选择,而不是试图在这里推出你自己的解决方案;不需要重新发明轮子。说到这里,你应该研究一下ORM(例如Hibernate),这样你就不必担心有人已经想到并处理过的所有这些情况。我是Java初学者,我不知道什么是RDBMS或ORM?我刚刚添加了一个列表,其中填充了结果集中的条目。在List.isEmpty()中,我可以很容易地看到查询是否有任何结果。RDBMS是一个关系数据库。谷歌会在上面找到数百万页。这是一项最好由数据库而不是Java来完成的功能。@Luka:RDBMS是运行SQL查询的数据库。
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);
}
}