我如何通过 Vertx return 我的数据库值?

How can I return my database values ​through Vertx?

下午好,我试图从我的数据库中获取值并将它们添加到列表中,但我总是得到空值。原因是什么,它如何保存这些值?当涉及到通过控制台打印时,我没有问题。最好的问候。

 public List<JsonObject> getAll() {
List<JsonObject> listObject = new ArrayList<JsonObject>();
try {
  this.connect();
  this.client.query("SELECT * FROM user")
    .execute().onSuccess(ar -> {
        for (Row row : ar) {
          listObject.add(row.toJson());
          System.out.println("---- OK " + listObject.stream().collect(Collectors.toList()));
        }
      }
    );
} catch (Exception e) {
  System.out.println(e.getLocalizedMessage());
}
System.out.println("--- Null: " + listObject.stream().collect(Collectors.toList()));
return listObject;

}

您不会使用 return,因为这是一个异步调用。

相反,传递 Consumer

public void getAll(Consumer<ArrayList<JsonObject>> callback) {

    try {
      this.connect();
      this.client.query("SELECT * FROM user").execute().onSuccess(ar -> {
        List<JsonObject> listObject = new ArrayList<>();
        for (Row row : ar) {
          listObject.add(row.toJson());
        }
        System.out.printf("Fetched %d objects%n", listObject.size());
        callback.accept(listObject);  // this replaces your return statement
      });
    } catch (Exception e) {
      System.out.println(e.getLocalizedMessage());  // TODO: replace with a proper logger
    }
}

在其他地方,传入消费者实例

databaseClient.getAll(list -> {
  // TODO: use the list to perform some action 
})

否则,您可能需要查看 R2DBC 以及如何使用它来将订阅者连接到结果集。