我需要帮助,因为我正在努力为Java程序中的select语句分配null作为参数。
我的脚本从csv文件读取值,然后根据提供的索引选择参数。但是,这些值有时是空字符串,例如(1,,3)因此从索引1开始,它将选择一个空字符串,并尝试将其设置为sql语句中的参数,这没有达到我想要的结果。
并且我们知道sql使用以下语法处理select语句中的空值: 例如 从表名中选择*,其中IS为NULL。
在以下情况下,最好将该值设置为null:
select * from tableName where abc=?
stmt2.setString(1, csvVal.get(index));
答案 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)