gpt4 book ai didi

java - vertx 中的数据库查询循环检查值是否存在

转载 作者:行者123 更新时间:2023-12-01 19:54:04 25 4
gpt4 key购买 nike

我正在生成一个值(使用 uuid java 的 6 个字母数字字母)并检查数据库是否该值已存在。如果该值已存在于数据库中,我会生成新值并再次检查该值是否存在(依此类推)。以同步方式(java),我可以这样做:

String voucher = this.genereatevoucher();
while(this.valuexists(voucher )){
test = this.genereatevoucher();
}

请注意,this.valuexists 方法检查数据库中是否存在该值,然后返回 true 或 false。但在vertx中,查询数据库的常用方式是:

client.getConnection(res -> {
if (res.succeeded()) {

SQLConnection connection = res.result();

connection.query("SELECT * FROM some_table", res2 -> {
if (res2.succeeded()) {

ResultSet rs = res2.result();
// Do something with results
}
});
} else {
// Failed to get connection - deal with it
}
});

我无法将上面的代码放在我的方法上,因为它是异步执行的,所以我的方法将始终返回 true/false (基于初始分配)。如何(可能)在 vertx 中进行数据库查询循环?

最佳答案

您可以将逻辑放入一个方法中,该方法再次调用自身,直到找不到匹配的行:

generateVoucher(handler);

其中handler是当找不到匹配行或数据库查询失败时要调用的代码。

然后方法实现如下:

private void generateVoucher(Handler<AsyncResult<String>> handler) {
String myId = ....;
client.getConnection(res -> {
if (res.succeeded()) {
SQLConnection connection = res.result();
connection.queryWithParams(myQuery, new JsonArray().add(myId), res2 -> {
if (res2.succeeded()) {
ResultSet rs = res2.result();
boolean inDb = checkAlreadyInDb(rs);
connection.close();
if (inDb) {
generateVoucher(handler);
} else {
handler.handle(Future.succeededFuture(myId));
}
} else {
handler.handle(Future.failedFuture(res2.cause));
}
});
} else {
handler.handle(Future.failedFuture(res.cause));
}
});
}

关于java - vertx 中的数据库查询循环检查值是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50225695/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com