powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / java storedproc
9 сообщений из 9, страница 1 из 1
java storedproc
    #34402952
Может кто уже сталкивался с подобным...
соединяюсь из хранимой процедуры к другой базе, пробую сделать запрос.
Соединение проходит успешно, вот только запрос ничего не выдает. В чем может быть дело???
использую DB2 8. процедура написана на java.

import java.sql.*; // Классы JDBC

public class PRdeb
{
public static void pRdeb ( int[] SQLCODE,
String[] SQLMessage,
String[] comment,
ResultSet[] rs1 ) throws Exception {
try { // Load the JDBC driver
Class.forName("com.ibm.db2.jcc.DB2Driver");
}
catch (ClassNotFoundException e) {
e.printStackTrace();
}

// Задать возвращаемые параметры
SQLCODE[0] = 0; // Правильная SQLCODE
SQLMessage[0] = "sql mess"; // Правильная SQLMessage
comment[0] = "comment";

PreparedStatement stmt = null;
boolean bFlag;
String sql;

String userid="userid"; // Declare variables for user ID and password
String password="password";

try{
Connection con = DriverManager.getConnection("jdbc:db2://host:50000/DATABASE", userid, password);
if (con == null){
comment[0] = "con == null";
}

sql = "SELECT PROCSCHEMA, PROCNAME FROM SYSCAT.PROCEDURES";
stmt = con.prepareStatement( sql );
bFlag = stmt.execute();
rs1[0] = stmt.getResultSet();
}
catch (SQLException e) {
// Задать возвращаемые параметры
SQLCODE[0] = e.getErrorCode();
SQLMessage[0] = e.getMessage();

// Закрыть открытые ресурсы
try {
if (rs1[0] != null) rs1[0].close();
if (stmt != null) stmt.close();
}
catch (SQLException e2) {
};
}
}
}
...
Рейтинг: 0 / 0
java storedproc
    #34403189
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А так:
Код: plaintext
rs1[ 0 ] = stmt.executeQuery();
?
...
Рейтинг: 0 / 0
java storedproc
    #34403218
Mark BarinsteinА так:
Код: plaintext
rs1[ 0 ] = stmt.executeQuery();
?

это уже пройдено, и так пробовал...
Могу только гадать - может что не то с правами, но подключаемый из процедуры пользователь - админ базы.
...
Рейтинг: 0 / 0
java storedproc
    #34403365
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А вот это
Код: plaintext
1.
if (rs1[ 0 ] != null) rs1[ 0 ].close();
if (stmt != null) stmt.close();
убрать?
...
Рейтинг: 0 / 0
java storedproc
    #34403472
Mark BarinsteinА вот это
Код: plaintext
1.
if (rs1[ 0 ] != null) rs1[ 0 ].close();
if (stmt != null) stmt.close();
убрать?

Не лечит.
что примечательно, вставка выполнилась успешно
INSERT INTO sa.persons (person_name, person_lastname) VALUES('new name','new lastname')
...
Рейтинг: 0 / 0
java storedproc
    #34403553
Спасибо моему коллеге по работе, бросил верную идею:
результирующий набор данных срабатывал только для default:connection.
Т.е. при подключении к другой базе мы отрабатывали все sql-скрипты, получали наборы данных, но не могли вернуть из процедуры набор данных, принадлежащие другому соединению, отличному от родной базы для хранимой процедуры. Почему? ответ не известен.
...
Рейтинг: 0 / 0
java storedproc
    #34403589
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexander_reshetnikov Mark BarinsteinА вот это
Код: plaintext
1.
if (rs1[ 0 ] != null) rs1[ 0 ].close();
if (stmt != null) stmt.close();
убрать?

Не лечит.Если вы будете закрывать ResultSet внутри процедуры, который хотите выдавать наружу, то, согласно доке, вы его не вернете.
...
Рейтинг: 0 / 0
java storedproc
    #34403688
Этот кусок сгенерил мастер построений в центре разработки DB2.
ResultSet закрывается при генерации SQLException, что вполне логично.
...
Рейтинг: 0 / 0
java storedproc
    #34403827
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexander_reshetnikovЭтот кусок сгенерил мастер построений в центре разработки DB2.
ResultSet закрывается при генерации SQLException, что вполне логично.Виноват, не обратил внимание на то, что он в catch блоке закрывается.
Тут дело вот в чем:
Все это работает с db2:default:connection из-за специальной обработки такого соединения.
В своих примерах они в теле процедуры его (Connection) закрывают и ничего - ResultSet виден.
Но если закрыть внешнее (не default) соединение, то связанный с ним ResultSet тоже закрывается до его обработки.
Выход: копировать ResultSet во временную таблицу через default connection и возвращать результат запросом из временной таблицы.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / java storedproc
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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