Помогите!!! JDBC: функция setObject(...)
С помощью 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!!!
СУБД 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();
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, за внимание.
Все бы ничего, только входные данные обязательно представляют собой строку целых, указанных через запятую. Причем, длина строки - переменная величина.
Может быть: 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();
Ещё быстрее ???
String myRandomSet = "123,346554,123,76876";
String SQL = "SELECT * FROM Test WHERE IdTest IN (" + myRandomSet + ")");
stmt = conn.prepareStatement( SQL);
rs = stmt.executeQuery();
Ещё быстрее ???
У меня в проекте как раз использован этот вариант передачи строковых данных в запрос.
И меня он вполне устраивал, пока...
Мое начальство не потребовало, чтобы строка запросов включала в себя переменные части в виде '?' вместо которых подставлялись бы значения...
Мол эт, по их мнению, больше соответствует стандартам, в том числе JDBC... :(
У меня в проекте как раз использован этот вариант передачи строковых данных в запрос.
И меня он вполне устраивал, пока...
Мое начальство не потребовало, чтобы строка запросов включала в себя переменные части в виде '?' вместо которых подставлялись бы значения...
Мол эт, по их мнению, больше соответствует стандартам, в том числе JDBC... :(
В данном случае легче убедить начальство в нецелесообразности стандартного подхода в конкретном частном случае, чем писать дурацкий, тормозной и главное НЕ НУЖНЫЙ разбор строки.
Если кто-то знает -
"Как, используя функцию setObject передать параметр типа Enumeration(например:1,22,3434,5,33) в выражение prepareStatement, чтобы при этом не добавлялись одинарные кавычки?" прошу помочь ;).