Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Помогите!!! JDBC: функция setObject(...)

5.6K
17 ноября 2003 года
polex
4 / / 17.11.2003
СУБД MySQL.
С помощью setObject необходимо передать параметр типа String в выражение prepareStatement так, чтобы не добавлялись какие-либо кавычки.

Например:

String str= "1,2,3";

stmt = conn.prepareStatement("SELECT * FROM Test WHERE IdTest IN (?)");
stmt.setObject(1,str);
rs = stmt.executeQuery();

По завершении компоновки запроса, получится:
>SELECT * FROM Test WHERE IdTest IN ('1,2,3')

Видно, что появились эти проклятые кавычки... из-за которых не работает IN.
Кто знает как это обойти, heeeeeelp!!!
2.5K
18 ноября 2003 года
mozheyko_d
21 / / 08.01.2003
Цитата:
Originally posted by polex
СУБД MySQL.
С помощью setObject необходимо передать параметр типа String в выражение prepareStatement так, чтобы не добавлялись какие-либо кавычки.

Например:

String str= "1,2,3";

stmt = conn.prepareStatement("SELECT * FROM Test WHERE IdTest IN (?)");
stmt.setObject(1,str);
rs = stmt.executeQuery();

По завершении компоновки запроса, получится:
>SELECT * FROM Test WHERE IdTest IN ('1,2,3')

Видно, что появились эти проклятые кавычки... из-за которых не работает IN.
Кто знает как это обойти, heeeeeelp!!!



Integer i1 = new Integer(1);
Integer i2 = new Integer(2);
Integer i3 = new Integer(3);


stmt = conn.prepareStatement("SELECT * FROM Test WHERE IdTest IN (?,?,?)");
stmt.setInteger( 1,i1);
stmt.setInteger( 2,i2);
stmt.setInteger( 3,i3);
rs = stmt.executeQuery();

5.6K
19 ноября 2003 года
polex
4 / / 17.11.2003
Цитата:
Originally posted by mozheyko_d


Integer i1 = new Integer(1);
Integer i2 = new Integer(2);
Integer i3 = new Integer(3);


stmt = conn.prepareStatement("SELECT * FROM Test WHERE IdTest IN (?,?,?)");
stmt.setInteger( 1,i1);
stmt.setInteger( 2,i2);
stmt.setInteger( 3,i3);
rs = stmt.executeQuery();



Все бы ничего, только входные данные обязательно представляют собой строку целых, указанных через запятую. Причем, длина строки - переменная величина.
Может быть: 1,55,3,445,717,22222,4,5,66, и т.п.

Можно было б разбирать строку по значениям и выделять из нее целые, но это дополнительное время... а надо, чтоб работало быстрее...
Все равно, спасибо, Вам mozheyko_d, за внимание.

2.5K
19 ноября 2003 года
mozheyko_d
21 / / 08.01.2003
Цитата:
Originally posted by polex


Все бы ничего, только входные данные обязательно представляют собой строку целых, указанных через запятую. Причем, длина строки - переменная величина.
Может быть: 1,55,3,445,717,22222,4,5,66, и т.п.

Можно было б разбирать строку по значениям и выделять из нее целые, но это дополнительное время... а надо, чтоб работало быстрее...
Все равно, спасибо, Вам mozheyko_d, за внимание.


String myRandomSet = "123,346554,123,76876";
String SQL = "SELECT * FROM Test WHERE IdTest IN (" + myRandomSet + ")");
stmt = conn.prepareStatement( SQL);
rs = stmt.executeQuery();
Ещё быстрее ???

5.6K
21 ноября 2003 года
polex
4 / / 17.11.2003
Цитата:
Originally posted by mozheyko_d

String myRandomSet = "123,346554,123,76876";
String SQL = "SELECT * FROM Test WHERE IdTest IN (" + myRandomSet + ")");
stmt = conn.prepareStatement( SQL);
rs = stmt.executeQuery();
Ещё быстрее ???



У меня в проекте как раз использован этот вариант передачи строковых данных в запрос.
И меня он вполне устраивал, пока...
Мое начальство не потребовало, чтобы строка запросов включала в себя переменные части в виде '?' вместо которых подставлялись бы значения...
Мол эт, по их мнению, больше соответствует стандартам, в том числе JDBC... :(

2.5K
21 ноября 2003 года
mozheyko_d
21 / / 08.01.2003
Цитата:
Originally posted by polex


У меня в проекте как раз использован этот вариант передачи строковых данных в запрос.
И меня он вполне устраивал, пока...
Мое начальство не потребовало, чтобы строка запросов включала в себя переменные части в виде '?' вместо которых подставлялись бы значения...
Мол эт, по их мнению, больше соответствует стандартам, в том числе JDBC... :(



В данном случае легче убедить начальство в нецелесообразности стандартного подхода в конкретном частном случае, чем писать дурацкий, тормозной и главное НЕ НУЖНЫЙ разбор строки.

5.6K
24 ноября 2003 года
polex
4 / / 17.11.2003
А никто и не говорил о разборе строк как о единственном способе в этом случае...

Если кто-то знает -
"Как, используя функцию setObject передать параметр типа Enumeration(например:1,22,3434,5,33) в выражение prepareStatement, чтобы при этом не добавлялись одинарные кавычки?" прошу помочь ;).
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог