我试图用20个可选的搜索参数编写JDBC查询。我想知道如何在没有太多if / else语句手动构造SQL字符串的情况下,使一组没有值(null)的参数不包含在SQL中。
当值实际为null时,我无法使用... AND (column = :value OR column IS NULL)
,因为查询搜索结果不正确。
答案 0 :(得分:2)
对每个搜索参数使用此语法
WHERE
(
(tableName.colName = val)
OR
(tableName.colName IS NULL AND val IS NULL)
)
答案 1 :(得分:1)
它取决于列数据类型,其参数可以为空或不是。
一般搜索条件和/或:
WHERE
(:col1 = col1_special_value OR col1 = :col1)
AND
(:col2 IS NULL OR col2 = :col2)
AND
// ...
示例用户搜索:
WHERE
(:name IS NULL OR name = :name) // :name is String - Nullable
AND
(:age = 0 OR age = :age) // :age is int - Not nullable
AND
// ...