Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Передача массива в ХП / 18 сообщений из 18, страница 1 из 1
27.05.2009, 17:48:29
    #36011524
Саабразим Аль-каши Бухани
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача массива в ХП
Есть ХР такого плана (posytgres)
автор
create function delsmth(ids int[]) returns void as
$body$
begin
delete from table where id = ANY (ids);
end;
$body$
LANGUAGE 'plpgsql' VOLATILE;


Смысл в том, что она принимает в качестве параметра массив. Подскажите код ее вызывающий.
Сейчас пишу

Код: plaintext
1.
2.
3.
4.
 int [] param = { 1 , 2 , 3 }; 
CallableStatement proc = 
connection.prepareCall("{ call delbyarray(?) }"); 
proc.setObject( 1 , param ); 
proc.execute();

на что получаю:
Can't infer the SQL type to use for an instance of [I. Use setObject() with an explicit Types value to specify the type to use.
...
Рейтинг: 0 / 0
27.05.2009, 17:51:19
    #36011534
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача массива в ХП
А так?
proc.setObject(1, param, Types.ARRAY );
...
Рейтинг: 0 / 0
27.05.2009, 17:54:34
    #36011545
Devider
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача массива в ХП
Blazkowicz,
А так
Cannot cast an instance of [I to type Types.ARRAY
=)
...
Рейтинг: 0 / 0
27.05.2009, 17:55:43
    #36011549
Devider
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача массива в ХП
Забыл сказать. Тип параметра в ХП можно менять, но без фанатизма, т.е. чтобы она все равно массив принимала. Если это что-то меняет.
...
Рейтинг: 0 / 0
27.05.2009, 18:04:52
    #36011580
Leonidv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача массива в ХП
Если я все правильно понимаю, вам нужно преобразователь сделать из Postgresql Array в java Array
http://jdbc.postgresql.org/documentation/head/ext.html

http://jdbc.postgresql.org/documentation/publicapi/org/postgresql/util/PGobject.html
http://cvs.pgfoundry.org/cgi-bin/cvsweb.cgi/jdbc/pgjdbc/org/postgresql/util/PGobject.java
...
Рейтинг: 0 / 0
27.05.2009, 20:21:16
    #36011831
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача массива в ХП
Саабразим Аль-каши Бухани wrote:

> Смысл в том, что она принимает в качестве параметра массив. Подскажите

Видишь ли, это не совсем стандартная фича - массив в качестве параметра
процедуры. И я не удивлюсь, если это вообще в JDBC не поддерживается.
Т.е. ты должен посмотреть:
-- поддерживается ли это в JDBC,
-- если нет, то есть ли расширение в конкретном драйвере PG для этого.
Если ни того, ни другого нет, то -- всё.


Вообще, передавать массив в качестве параметра процедуры очень странно,
и не очень правильно.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
27.05.2009, 20:53:34
    #36011876
Саабразим Аль-каши Бухани
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача массива в ХП
MasterZiv
Вообще, передавать массив в качестве параметра процедуры очень странно,
и не очень правильно.


Возможно. Необходимо просто передавать переменное число параметров запросу. Вот начало обсуждения. Может, посоветуете еще варианты?
...
Рейтинг: 0 / 0
27.05.2009, 20:56:26
    #36011882
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача массива в ХП
Саабразим Аль-каши Бухани пишет:

> Возможно. Необходимо просто передавать переменное число параметров
> запросу. Вот <http://sql.ru/forum/actualthread.aspx?tid=667182> начало
> обсуждения. Может, посоветуете еще варианты?

Не передавать запросу переменное число параметров.
вызывать процедуру 1 N раз, передавая по одному
параметру, параметры накапливать в БД, потом вызвать процедуру 2,
с идентификатором этого набора параметров (или неявным идентификатором
сессии, если это возможно). И уже процедура 2 делает то, что надо.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
27.05.2009, 21:03:58
    #36011896
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача массива в ХП
Devider
А так
Cannot cast an instance of [I to type Types.ARRAY
=)
Придется ему реализацию java.sql.Array скармливать. Кстати, есть мнение что в вырожденых случаях можно через запятую и в setString()/setObject()
...
Рейтинг: 0 / 0
27.05.2009, 21:09:25
    #36011900
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача массива в ХП
И ещё вариантик:
http://java.sun.com/javase/6/docs/api/java/sql/Connection.html#createArrayOf(java.lang.String,%20java.lang.Object%5B])]http://java.sun.com/javase/6/docs/api/java/sql/Connection.html#createArrayOf(java.lang.String,%20java.lang.Object[])
...
Рейтинг: 0 / 0
28.05.2009, 14:44:04
    #36013373
Саабразим Аль-каши Бухани
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача массива в ХП
Ну в итоге работает так.

Код: plaintext
1.
2.
3.
4.
5.
Object[] param = { 1 , 2 , 3 , 4 };
Array array = connection.createArrayOf("integer", param);
CallableStatement proc = connection.prepareCall("{ call delbyarray(?) }");

proc.setArray( 1 , array);
proc.execute();

Есть некоторые сомнения по поводу не фигню ли я делаю, но это уже другой вопрос. Спасибо за идеи.
...
Рейтинг: 0 / 0
10.06.2009, 11:17:34
    #36034993
Саабразим Аль-каши Бухани
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача массива в ХП
Работает, да не совсем. Работает только если конектиться так:

Код: plaintext
1.
2.
String driverName = "org.postgresql.Driver"; 
 Class .forName(driverName); 
Connection cn = DriverManager.getConnection( "jdbc:postgresql://localhost:5432/mydb","postgres","passw"); 


Если же получать конекшн из пула

Код: plaintext
1.
2.
3.
4.
Context ctx =  new  InitialContext(); 
 if (ctx ==  null  )  throw   new  Exception("No Context"); 
DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/postgres"); 
Connection cn = ds.getConnection(); 

то на строку
Array array = connection.createArrayOf("integer", param);
получаю Цитата:

авторorg.apache.jasper.JasperException: An exception occurred processing JSP page /hello.jsp at line 52

49: out.println("so, you can cook:<br>");
50:
51: try{
52: java.sql.Array array = cn.createArrayOf("integer", params);
53: CallableStatement proc = cn.prepareCall("{ call getallprods(?) }");
54: proc.setArray(1, array);
55: ResultSet rs = proc.executeQuery();


Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:505)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:398)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)


root cause
javax.servlet.ServletException: java.lang.AbstractMethodError: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.createArrayOf(Ljava/lang/String;[Ljava/lang/Object;)Ljava/sql/Array;
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:852)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:781)
org.apache.jsp.hello_jsp._jspService(hello_jsp.java:125)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)

root cause
java.lang.AbstractMethodError: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.createArrayOf(Ljava/lang/String;[Ljava/lang/Object;)Ljava/sql/Array;
org.apache.jsp.hello_jsp._jspService(hello_jsp.java:105)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)

Что бы это значило?
...
Рейтинг: 0 / 0
10.06.2009, 17:05:32
    #36036054
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача массива в ХП
Используемый DBCP контейнера не поддерживает JDBC API последней версии.
...
Рейтинг: 0 / 0
11.06.2009, 11:33:33
    #36037189
Саабразим Аль-каши Бухани
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача массива в ХП
BlazkowiczИспользуемый DBCP контейнера не поддерживает JDBC API последней версии.
А.. что делать?
...
Рейтинг: 0 / 0
11.06.2009, 13:42:52
    #36037610
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача массива в ХП
Пропатчить томкат либо прикрутить другой пул, который поддерживает нужный метод.
...
Рейтинг: 0 / 0
11.06.2009, 14:28:58
    #36037755
Саабразим Аль-каши Бухани
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача массива в ХП
А как прикрутить и который? И где почитать? Блин.. Что хоть в гугле написать?
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
18.04.2013, 16:27:36
    #38231199
KRED
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача массива в ХП
вот тоже наступил на такую граблю с c3p0-0.92.jar


Кто то знает уже способ лечения ?
...
Рейтинг: 0 / 0
18.04.2013, 16:33:16
    #38231221
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача массива в ХП
KREDвот тоже наступил на такую граблю с c3p0-0.92.jar
Кто то знает уже способ лечения ?
Какой эксепшн?
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Передача массива в ХП / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]