0

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

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

正如我们所知,sql 在 select 语句中使用以下语法处理空值:例如 select * from tablename where a IS NULL。

在以下情况下将值设置为 null 的最佳方法是什么:

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

1 回答 1

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)
于 2018-11-06T00:05:50.800 回答