vert.x - 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();
解决方案
.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
解决。
推荐阅读
- python - 需要使用示例静态 JSON 验证和验证脚本生成的结果 JSON 是否正确
- powershell - 需要帮助将用户以前的 ou、描述和规范名称导出到 csv 文件,这样我就可以创建一个脚本来将其反向用于 DR
- oracle - Oracle SQL 子查询期望缺少右括号
- css - 如何使用 css 用类声明覆盖内联样式?
- python - AttributeError: 'function' 对象在线程函数中使用时没有属性'Serial' 错误
- macos - 如何在 Mac 的 Dock 上对应用程序的多个窗口进行分组
- python - Django:如何从另一个模型更新字段值?
- javascript - 对象的嵌套数组需要通过两个循环使用 async/await 转换为数组对象
- c# - 使用 System.Text.Json 读/写 JSON
- binding - Loopback 4 将 USER_SERVICE 与自定义用户服务绑定