在select sql语句中将null设置为参数

时间:2018-11-05 23:38:00

标签: java sql oracle select setstring

我需要帮助,因为我正在努力为Java程序中的select语句分配null作为参数。

我的脚本从csv文件读取值,然后根据提供的索引选择参数。但是,这些值有时是空字符串,例如(1,,3)因此从索引1开始,它将选择一个空字符串,并尝试将其设置为sql语句中的参数,这没有达到我想要的结果。

并且我们知道sql使用以下语法处理select语句中的空值: 例如 从表名中选择*,其中IS为NULL。

在以下情况下,最好将该值设置为null:

select * from tableName where abc=? 
stmt2.setString(1, csvVal.get(index));

1 个答案:

答案 0 :(得分:2)

您必须使用单独的PreparedStatement#setNull方法将参数值设置为NULL

if(csvVal.get(index) == null){
    stmt2.setNull(1, java.sql.Types.NVARCHAR ); // Or whatever data type your column is
}else{
    stmt2.setString(1, csvVal.get(index));
}

编辑:我的原始答案不完整。您还必须修改查询,因为NULL = NULL将始终返回false。

--use a variable to avoid multiple stmt2.set... calls
DECLARE @nullCheck NVARCHAR(MAX) = ? -- Or whatever data type your column is
SELECT *
FROM tableName
WHERE abc = @nullCheck -- if you don't want the null values
OR (abc IS NULL -- only get the records if both the column and the parameter are NULL
    AND
    @nullCheck IS NULL)