【问题标题】:Get the String sql from a Couchbase N1qlQuery DSL?从 Couchbase N1qlQuery DSL 获取字符串 sql?
【发布时间】:2020-08-05 21:11:19
【问题描述】:

在构建像 stack overflow answercouchbase java n1ql queries docs 中的示例这样的查询对象之后,我们能否在将字符串查询发送到服务器之前获取它?我不想将它发送到服务器。只是想用 DSL 构建它,然后获取带有参数的完整查询的字符串,将发送到服务器的内容,并以另一种方式处理。

【问题讨论】:

    标签: couchbase querydsl couchbase-java-api


    【解决方案1】:

    只需调用toString(),即可将Statement 转换为字符串:

    import com.couchbase.client.java.document.json.JsonObject;
    import com.couchbase.client.java.query.N1qlQuery;
    import com.couchbase.client.java.query.Statement;
    
    import static com.couchbase.client.java.query.Select.select;
    import static com.couchbase.client.java.query.dsl.Expression.i;
    import static com.couchbase.client.java.query.dsl.Expression.path;
    import static com.couchbase.client.java.query.dsl.Expression.s;
    import static com.couchbase.client.java.query.dsl.Expression.x;
    
    Statement statement = select(path(i("travel-sample"), "*"))
        .from(i("travel-sample"))
        .where(x("name").eq(x("$airline_param"))
            .and(x("type").eq(s("airline"))));
    
    System.out.println(statement);
    

    输出:

    SELECT `travel-sample`.* FROM `travel-sample` WHERE name = $airline_param AND type = "airline"
    

    如您所见,这不会进行任何参数替换。参数与语句分开发送到服务器。如果您想查看发送到服务器的内容,可以致电N1qlQuery.n1ql()

    JsonObject args = JsonObject.create().put("$airline_param", "FooFliers");
    N1qlQuery q = N1qlQuery.parameterized(statement, args);
    
    JsonObject statementAndArgs = q.n1ql(); 
    System.out.println(statementAndArgs);
    

    输出(美化):

    {
      "statement": "SELECT `travel-sample`.* FROM `travel-sample` WHERE name = $airline_param AND type = \"airline\"",
      "$airline_param": "FooFliers"
    }
    

    如果您需要内联参数,那么您需要自己做这部分,要格外小心正确地转义字符串参数。

    【讨论】:

    • 谢谢。你能给我这个进口吗?如果它保存在某个地方...我正在处理 Statement 语句部分,但无法从 Functions 中猜到它?
    • 一个问题(或建议,如果还没有)stackoverflow.com/questions/63319538/…
    猜你喜欢
    • 2023-03-31
    • 2019-05-11
    • 2011-09-18
    • 2018-01-07
    • 2012-07-27
    • 2023-03-25
    • 1970-01-01
    • 2020-11-12
    • 2020-11-09
    相关资源
    最近更新 更多