首页 > 解决方案 > Vertx mysql客户端异步和同步

问题描述

我需要有关 vertx mysql 客户端 v4.1.0 java api 的帮助。我使用了下面的两个代码,但是我得到的结果与数字 2 不一致,因为即使有数据库记录,它也会返回空值。这不是阻塞电话吗?

/* 1. asynchronous */
mysql.query(sql).execute(asr -> {
    if (asr.succeeded()) {
        RowSet<Row> rowset = asr.result();
    }else{
       //Log and handle error
    }
});


/* 2. ??? synchronous */
RowSet<Row> rowset = mysql.query(sql).execute().result();

标签: vert.x

解决方案


.reactivex原始Vert.x MySQL客户端库变体在设计上都是异步的,提供Handler基本类型作为处理 SQL 查询结果的一种方式:

io.vertx.sqlclient.Query#execute(Handler<AsyncResult> handler) 执行查询。

Vert.x仍然为常见模式(例如JavaFuture和方法签名)提供 API 可移植性:

io.vertx.sqlclient.Query#execute() 与 execute(Handler) 类似,但返回异步结果的 Future

Reactive客户端库端口提供了一个 rxfied 方法以及作为发布者返回查询结果Single

io.vertx.reactivex.sqlclient.Query#rxExecute() 执行查询。

考虑到上述考虑,调用时:

RowSet<Row> rowset = mysql.query(sql).execute().result();

您正在执行 SQL 查询,然后阻塞当前线程,直到返回查询结果并Future解决。


推荐阅读