我目前正在处理需要根据输入动态创建的查询 . 基本上在我的数据库中,我存储了一堆键/值对的映射,查询是键/值对的映射,所有键/值对都需要匹配 .

我已经找到了如何使用“$ param”将N1qlQuery.parameterized()与语句和占位符值一起使用,但这不适用于Expression.x(“field”)子句中的字段名 . 问题是,虽然我的字段值对于SQL注入是安全的,但是如果我只是将用户输入的字符串值放在那里,我的字段名称就不会出现 .

如何在查询中转义动态构建的字段名称?

String fieldNameThatCanBeHacked = "fieldNameThatCanBeHacked";
    Statement statement = Select.select("*").from(CouchbaseConfig.BUCKET_NAME).where(Expression.x(fieldNameThatCanBeHacked).eq("$param");