Подготовленный оператор с подстановочным знаком не возвращает определенные строки, но запрос возвращает все строки? - PullRequest
0 голосов
/ 06 сентября 2011

Я использую JTDS в качестве драйвера для подключения к серверу SQL.

Вот запрос, который вызывает у меня проблемы:

SELECT EmpID,FirstName,LastName,CompanyName,DepartmentName,JobTitle,HireDate FROM Employees where UPPER(FirstName) LIKE 'KEVIN%'

Возвращает 2 строки на SQL Server.Тот, который имеет «KEVIN» в верхнем регистре, а другой, который имеет «Кевин», как это.Я использовал шаблон, чтобы убедиться, что получаю оба результата.В моем классе EmployeeDAO я использую следующее:

        ps = con.prepareStatement("SELECT EmpID,FirstName,LastName,CompanyName,"
                + "DepartmentName,JobTitle,HireDate FROM Employees WHERE UPPER(FirstName) LIKE ?");
        ps.setString(1, FirstName + "%");
        rs = ps.executeQuery();

И затем, конечно, я ставлю KEVIN на свой основной.Он возвращает только ОДНУ строку, то есть строку 'Кевина'.

Как это исправить, чтобы он возвращал все строки?

Ответы [ 2 ]

0 голосов
/ 06 сентября 2011

Ваш запрос выглядит нормально (хотя я бы выделил значение параметра в верхнем регистре перед его настройкой, чтобы сделать его более надежным). Проблема только в том, как вы собираете строки из ResultSet. Скорее всего, вы просто переопределяете предыдущую строку на следующую, чтобы в итоге в вашей коллекции была только одна строка (последняя).

0 голосов
/ 06 сентября 2011

Параметры сортировки по умолчанию для установки SQL Server SQL_Latin1_General_CP1_CI_AS и не чувствительны к регистру.

Изменить параметры сортировки запроса:

SELECT Col1
FROM Table1
WHERE Col1 COLLATE Latin1_General_CS_AS LIKE 'KEVIN%'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...