Передача строкового значения в столбец SQL bigint - PullRequest
0 голосов
/ 28 марта 2012

С учетом следующего Устава:

 String query = "Select * from T_spareParts where SparePartPK IN (? )"

В моем BackBean (JSF 2) я сначала перебираю все машины в таблице и строю строку из всех выбранных в данный момент машин (выбирая ID каждого автомобиля в качестве первичного ключа), чтобы можно было посмотреть окончательную строку перед передачей в SQL как:

String finalString = " '1','2','3','4'";

А потом:

this.prepareStatement= this.connection.prepareStatement(query);
this.prepareStatement.setString(1,finalString);
this.prepareStatement.executeQuery();

Исключение:

Error converting data type nvarchar to bigint.

Теперь я понимаю, что исключение связано с тем, что SparePartPK имеет тип bigint, и мы передаем строку.

Но в SQL Server (2008) я могу сделать:

 Select * from T_spareParts where SparePartPK IN ('1','2','3','4')"

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

Обновление:

Я также пытался создать finalString без одинарных кавычек, что вызывает одно и то же исключение:

String finalString = " 1,2,3,4";

Ответы [ 2 ]

1 голос
/ 28 марта 2012

Вы должны поместить числа в массив (не в строку) и использовать prepareStatement.setArray ()

0 голосов
/ 28 марта 2012

Спасибо за предложения.Хотя в качестве альтернативы я создал StoredProcedure, где он принимает один параметр, и внутри StoredProcedure я запустил вышеуказанный запрос, сформулировав раздел IN, используя переданный параметр.

Таким образом, весь приведенный выше код по-прежнему применяется. Параметр, передаваемый в storeDProcedure, представляет собой одну строку, разделенную , без одинарных кавычек.

Не может быть оптимальным ответом, но работает хорошо :).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...