Java 将CRUD vertx之后的数据返回到处理程序中,以便再次使用

Java 将CRUD vertx之后的数据返回到处理程序中,以便再次使用,java,handler,vert.x,Java,Handler,Vert.x,她是我的数据库插入方法 public static void addMessage(RoutingContext routingContext) { System.out.println("Add Message"); String message = routingContext.getBodyAsJson().getString("message"); JsonObject params = new JsonObject(); params.put("QUE

她是我的数据库插入方法

public static void addMessage(RoutingContext routingContext) {
    System.out.println("Add  Message");
    String message = routingContext.getBodyAsJson().getString("message");
    JsonObject params = new JsonObject();
    params.put("QUERY", Queries.DB_INSERT_MESSAGE);
    params.put("PARAMS", new JsonArray().add(message));
    DB.insert(params, res -> {
        if (res.succeeded()) {
            ClientCallBack.sendJsonResponce(routingContext, res.result().getJsonArray("rows"));
        } else {
            ClientCallBack.sendErrorResponce(routingContext, res.cause().getMessage());
        }
    });
publicstaticvoidinsert(jsonobjectreqparams,Handler){
插入(config.getJsonObject(CONS_config.DATABASE).getString(CONS_config.DEFAULT_DATABASE),reqParams,handler);
}
公共静态void插入(字符串DB_前缀、JsonObject reqParams、处理程序){
if(CONS_CONFIG.ORACLE.equalsIgnoreCase(DB_前缀)){
oracle.updateWithParams(reqParams,handler);
}否则{
updateWithParams(reqParams,handler);
}
}
和updateWithParams

public static void insert (JsonObject reqParams, Handler<AsyncResult<JsonObject>> handler){
    insert(config.getJsonObject(CONS_CONFIG.DATABASE).getString(CONS_CONFIG.DEFAULT_DATABASE), reqParams, handler);
}

public static void insert (String DB_PREFIX, JsonObject reqParams, Handler<AsyncResult<JsonObject>> handler){
    if(CONS_CONFIG.ORACLE.equalsIgnoreCase(DB_PREFIX)){
        oracle.updateWithParams(reqParams, handler);
    }else{
        mysql.updateWithParams(reqParams, handler);
    }
}
public void updateWithParams(JsonObject参数,处理程序resultHandler){
debug(“从参数开始:+paramsQuery.encode());
字符串sql=paramsQuery.getString(“查询”);
JsonArray params=paramsQuery.getJsonArray(“params”);
getConnection(连接->{
if(connection.successed()){
connection.result().updateWithParams(sql、params、query->{
if(query.successed()){
handler.handle(Future.succeededFuture(query.result().toJson());
}否则{
logger.debug(query.cause().getMessage());
resultHandler.handle(Future.failedFuture(Msg.UPDATE_WITH_PARAMS_FAIL));
}
});
}否则{
logger.debug(connection.cause().getMessage());
resultHandler.handle(Future.failedFuture(Msg.CONNECT_TO_DATA_BASE_FAIL));
}
connection.result().close();
});
}
我的问题是,即使数据已在数据库中注册,但处理程序返回空值。有没有办法在每次CRUD操作后返回结果? my methode addMessage中的res.result().getJsonArray(“行”)返回null。
谢谢

正如@Paulo Lopes建议的那样,您应该使用.getKeys()方法:


insert不会返回行,这就是为什么没有数据。如果要获取插入的数据,需要获取生成的密钥(或使用您自己提供的密钥)并在之后选择。@PauloLopes感谢您的回复,但即使是删除或更新。它返回null。你能告诉我如何使用genrated键吗?@PauloLopes我想得到生成的键整数,但我得到的是
{“keys”:[“aaasnlaaaaaaaaaaaaac”],“updated”:1}
。谢谢你的回答,但我的问题是,当我使用r.result().getKeys()时,它会像这样返回字符串[“aaasnlaaaaaaaaaaaaaiac”]因此,我无法使用此方法result.getKeys().getInteger(0)您是否在Oracle上,有可能吗?Oracle会返回您的ROWID。我编辑了我的答案以反映Oracled非常感谢您的帮助@Alexey now iget keys empty{“keys”:[],“Update”:1}我不知道oracle中的问题是否是我使用序列自动递增ID的方式非常感谢@Alexey您的答案非常完美现在我可以拿到我的钥匙了
 public void updateWithParams(JsonObject paramsQuery, Handler<AsyncResult<JsonObject>> resultHandler) {
    logger.debug("START WITH PARAMS : "+paramsQuery.encode());
    String sql = paramsQuery.getString("QUERY");
    JsonArray params = paramsQuery.getJsonArray("PARAMS");
    getConnection(connection->{
        if (connection.succeeded()) {
            connection.result().updateWithParams(sql, params, query -> {
                if (query.succeeded()) {
                    resultHandler.handle(Future.succeededFuture(query.result().toJson()));
                } else {
                    logger.debug(query.cause().getMessage());
                    resultHandler.handle(Future.failedFuture(Msg.UPDATE_WITH_PARAMS_FAIL));
                }
            });
        }else{
            logger.debug(connection.cause().getMessage());
            resultHandler.handle(Future.failedFuture(Msg.CONNECT_TO_DATA_BASE_FAIL));
        }
            connection.result().close();

    });
}
mySQLClient.getConnection((res)->{
        if (res.succeeded()) {
            SQLConnection conn = res.result();

        JsonArray params  = new JsonArray().add(UUID.randomUUID().toString()).add("A").add("abcd");
        conn.updateWithParams("insert into user (email, name, password) values (?, ?, ?)", params,
                (r) -> {
                    if (r.succeeded()) {

                        // Your IDs
                        JsonArray keys = r.result().getKeys();

                        // This should work for MySQL
                        //String q = "select * from user where id in (?)";

                        // This should work with Oracle, since Oracle returns ROWID (string), not ID (integer)
                        String q = "select id from user where rowid in (?)";
                        conn.queryWithParams(q, keys, (result) -> {
                            // Return it instead of printing
                            if (result.succeeded()) {
                                System.out.println(result.result().toJson());
                            }
                        });
                    }
                    else {
                        // Handle error
                    }
        });
        }
        else {
            res.cause().printStackTrace();
        }
        // Deal with errors
    });