我有一个 SQL 模板文件,其中包含以下子句:
AND (%s = '' OR type in (%s))
这里有一个问题,当
type
的值为type1
时,查询变成
AND ('type1' = '' or type in ('type1'))
这太完美了。在我的 JAVA 代码中,我使用
String.format
将 %s
替换为所需值,并且还具有字符串值中提供的 '
。
问题是当我有多个值时,比如说我有
type1
和 type2
。然后我的代码将其翻译为
AND ('type1', 'type2' = '' or type in ('type1', 'type2')
很明显,第一个布尔条件语法是无效的。我尝试这样做是因为在我的用例中
type
有时是过滤器子句的一部分,有时则不是。我该如何解决这个问题?我可以修改模板,但不知道如何/修改什么来解决这个问题。
您可以根据类型是否为 NULL 或有值来更新模板。
String types = "'type1', 'type2'";
// String types = "'type1'";
// String types = "";
// String types = null;
String sqlTemplate = "AND (type = '' OR type IS NULL %s)";
String sqlQuery = String.format(
sqlTemplate,
(types == null || types.isEmpty()) ? "" : "OR type IN (" + types + ")"
);