【问题标题】:How can I return my database values ​through Vertx?如何通过 Vertx 返回我的数据库值?
【发布时间】:2022-01-08 07:24:31
【问题描述】:

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

 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;

}

【问题讨论】:

    标签: java vert.x


    【解决方案1】:

    您不会使用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 以及如何使用它来将订阅者连接到结果集。

    【讨论】:

    • 谢谢。很抱歉问,但如果我想让它返回值,我该怎么做?如果可能的话,无论如何。问候。
    • 无法调用return 或修改可以在onSuccess 中返回的外部非最终变量,不。默认情况下,Vertx 应该保持非阻塞(阻塞方法通常存在返回语句)
    猜你喜欢
    • 2014-09-18
    • 2021-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    • 2019-11-14
    相关资源
    最近更新 更多