我正在使用一个带有SQL语法的Azure Cosmos NoSQL数据库。如何创建可以动态添加更多WHERE语句的SQL字符串?例如,如果我有两个where语句,我希望能够不必在"WHERE f.%s=@val“中为一个函数编写代码,然后使用"WHERE f.%s=@val1和f.%s=@val2”硬编码另一个函数。我希望最多有7条WHERE语句。
下面的代码查询一个属性(一个WHERE语句)和另一个查询两个属性(两个WHERE语句)。这涉及到大量的硬编码。与queryString的线路是我遇到麻烦的地方。
public Iterable<Document> queryForOneProperty(String databaseName, String
collectionName, String key, String val) {
FeedOptions queryOptions = getDefaultFeedOptions();
String collectionLink = String.format("/dbs/%s/colls/%s", databaseName, collectionName);
SqlParameterCollection paramCollection = new SqlParameterCollection();
paramCollection.add(new SqlParameter("@val", val));
SqlQuerySpec query = new SqlQuerySpec(String.format("SELECT * FROM %s f WHERE f.%s = @val", collectionName, key), paramCollection);
return query;
}
public Iterable<Document> queryForTwoProperties(String databaseName, String
collectionName, String[] keys, String[] vals) {
FeedOptions queryOptions = getDefaultFeedOptions();
String collectionLink = String.format("/dbs/%s/colls/%s", databaseName, collectionName);
SqlParameterCollection paramCollection = new SqlParameterCollection();
paramCollection.add(new SqlParameter("@val1", vals[0]));
paramCollection.add(new SqlParameter("@val2", vals[1]));
String queryString = String.format("SELECT * FROM %s f WHERE f.%s = @val1 AND f.%s = @val2", collectionName, keys[0], keys[1]);
SqlQuerySpec query = new SqlQuerySpec(queryString, paramCollection);
return query;
}“”“
发布于 2019-06-11 23:38:20
尝试此用法为空
SELECT * FROM %s f WHERE (@val1 is null or f.%s = @val1) AND (@val2 is null or f.%s = @val2) https://stackoverflow.com/questions/56546756
复制相似问题