установка null для параметра в операторе select sql - PullRequest
0 голосов
/ 06 ноября 2018

Мне нужна помощь, поскольку я изо всех сил стараюсь присвоить значение null в качестве параметра для оператора select в моей java-программе.

Мой скрипт считывает значения из файла CSV, а затем выбирает параметр на основе предоставленного индекса. Однако значения иногда являются пустой строкой, например, (1, 3), поэтому из индекса 1 он выберет пустую строку и попытается установить ее в качестве параметра в выражении sql, это не приведет к результатам, которые я ищу.

и, как мы знаем, sql обрабатывает нулевые значения в операторе select со следующим синтаксисом: например выберите * из таблицы, где IS NULL.

Как лучше установить значение как нулевое с помощью сценария ниже:

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

1 Ответ

0 голосов
/ 06 ноября 2018

Вы должны использовать отдельный метод 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)
...