java 关闭jdbc sqlconnection是如何工作的?

cnjp1d6j  于 4个月前  发布在  Java
关注(0)|答案(1)|浏览(106)

在下面的代码块中,我希望在异步执行SQL查询之前同步关闭连接,但显然SQL连接拒绝关闭,直到查询完成执行。

public static Future<List<JsonObject>> queryExecuter(JDBCClient jdbcClient, int id,String type) {
    Promise<List<JsonObject>> promise = Promise.promise();
    
    jdbcClient.getConnection(sqlConnection->{
        if(sqlConnection.succeeded()) {
            DTOQueryInfo dtoQueryInfo = queryHelper(sqlConnection.result(), id, type);
            //Execute query 
            sqlConnection.result().queryWithParams(dtoQueryInfo.getSqlString(), dtoQueryInfo.getParams(), fetchSequenceResult->{
                if (fetchSequenceResult.succeeded()) {
                    
                    if (fetchSequenceResult.result()==null || fetchSequenceResult.result().getRows()==null || fetchSequenceResult.result().getRows().isEmpty()) {       
                        logger.info("Query with no result ");
                        promise.fail("Failed!");
                    }else {
                        logger.info("Query Result:{} ", fetchSequenceResult.result().getRows());
                        promise.complete(fetchSequenceResult.result().getRows());
                    }
                } else {
                    logger.error("Unable to inquiryActions  :{}", fetchSequenceResult.cause());
                    promise.fail(new WSEXCP_NoAccessDefinedToNode(Integer.parseInt(String.valueOf(101)+String.valueOf(941)), "خطای داخلی. لطفا با راهبر سامانه تماس بگیرید.", HttpStatusEnum.SERVER_ERROR.getMin()));
                }

            });
        }
        else {
            logger.error("خطای اتصال به دیتابیس : ", sqlConnection.cause());
            promise.fail("خطای اتصال به دیتابیس");
        }
        sqlConnection.result().close();
    });
    return promise.future();
}

个字符

0x6upsns

0x6upsns1#

要确保在执行查询后关闭连接,应将close语句移动到queryWithParams回调中。

public static Future<List<JsonObject>> queryExecuter(JDBCClient jdbcClient, int id, String type) {
    Promise<List<JsonObject>> promise = Promise.promise();

    jdbcClient.getConnection(sqlConnection -> {
        if (sqlConnection.succeeded()) {
            DTOQueryInfo dtoQueryInfo = queryHelper(sqlConnection.result(), id, type);
            // Execute query 
            sqlConnection.result().queryWithParams(dtoQueryInfo.getSqlString(), dtoQueryInfo.getParams(), fetchSequenceResult -> {
                if (fetchSequenceResult.succeeded()) {

                    if (fetchSequenceResult.result() == null || fetchSequenceResult.result().getRows() == null || fetchSequenceResult.result().getRows().isEmpty()) {
                        logger.info("Query with no result ");
                        promise.fail("Failed!");
                    } else {
                        logger.info("Query Result:{} ", fetchSequenceResult.result().getRows());
                        promise.complete(fetchSequenceResult.result().getRows());
                    }

                } else {
                    logger.error("Unable to inquiryActions  :{}", fetchSequenceResult.cause());
                    promise.fail(new WSEXCP_NoAccessDefinedToNode(Integer.parseInt(String.valueOf(101) + String.valueOf(941)), "خطای داخلی. لطفا با راهبر سامانه تماس بگیرید.", HttpStatusEnum.SERVER_ERROR.getMin()));
                }

                // Close the connection here, after the query execution
                sqlConnection.result().close();
            });
        } else {
            logger.error("خطای اتصال به دیتابیس : ", sqlConnection.cause());
            promise.fail("خطای اتصال به دیتابیس");
        }
    });

    return promise.future();
}

字符串

相关问题