powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Java, Firebird, пустой ResultSet из хранимой процедуры.
15 сообщений из 15, страница 1 из 1
Java, Firebird, пустой ResultSet из хранимой процедуры.
    #39337384
Nikgogolev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!
Перерабатываю код, необходимо весь SQL-код перенести на сервер Firebird.
Firebird 2.5.5 + Jaybird-2.2.9-JDK_1.8 + jdk1.8.0_71 + NetBeans IDE 8.1 + IBExpert
Хранимая процедура на сервере:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
create or alter procedure POST_SEL
returns (
    ID1 INTEG,
    NAIM1 STR_MIDDLE)
as
begin
  for
     select id, naim from post into :id1, :naim1 
  do
  suspend;
end 


примечание: INTEG, STR_MIDDLE - domains Firebird : integer и varchar(500).
выборка делается без проблем и сервер при вызове из других процедур получает полную выборку таблицы "POST"
первоначально код рабочий на JAVA был:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
        ResultSet rs=null;
        Statement Statmt=null;
        String query="SELECT ID, NAIM FROM POST";  
        DB qq=new DB();      // Класс для работы с конкретной БД: соединение с БД и т.д.
        qq.Set_Connection();// Соединяемся с БД
        try 
        {
            Statmt = qq.con.createStatement();
            rs = Statmt.executeQuery(query);
        } 
        catch (SQLException ex) { ex.printStackTrace();} 


при замене String query="SELECT ID, NAIM FROM POST"; на String query="{call post_sel()}"; не получает ни одной записи.

При работе через CallableStatement, страничка получает пустой ResultSet, код Java:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
        String query="{call post_sel()}";       
        DB qq =new DB();
        qq.Set_Connection();
        CallableStatement cstmt;
        ResultSet rs=null;
        cstmt = qq.con.prepareCall(query);
        try 
       {    
            cstmt.executeQuery();
            rs=cstmt.getResultSet();
        } 
        catch (SQLException ex) { ex.printStackTrace(); }

Со строкой запроса String query="SELECT ID, NAIM FROM POST"; виснет...
проблем с другими хранимыми процедурами (Insert, Delete, Update) не возвращающими значениями не возникло.
подскажите, куда копать...
Может на ветке Firebird-а вопрос продублировать?
Спасибо.
...
Рейтинг: 0 / 0
Java, Firebird, пустой ResultSet из хранимой процедуры.
    #39337389
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
try (Connection con = DriverManager.getConnection(..........);
                CallableStatement proc_ = con.prepareCall("{call xxxx()}");) {
            rs = proc.executeQuery(;
            rs.next();
            System.out(rs.getString(1)
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
...
Рейтинг: 0 / 0
Java, Firebird, пустой ResultSet из хранимой процедуры.
    #39337394
Nikgogolev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
считывание произвожу следующим образом:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
ArrayList<M_Post> list = new ArrayList<M_Post>();
boolean bNext=false;       
        try {
                bNext=rs.next();
                while(bNext)
                {
                    M_Post post = new M_Post();
                    post.setId(rs.getInt("id"));
                    post.setNaim(rs.getString("naim"));
                    list.add(post);
                    bNext=rs.next();
                }
            } catch (SQLException ex)   { ex.printStackTrace(); }   
        return  list;


на всякий случай...
...
Рейтинг: 0 / 0
Java, Firebird, пустой ResultSet из хранимой процедуры.
    #39337423
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Java, Firebird, пустой ResultSet из хранимой процедуры.
    #39337482
Nikgogolev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,
Спасибо за ответ!
Повторно изучил ветки форума Java и Firebird.
...
Рейтинг: 0 / 0
Java, Firebird, пустой ResultSet из хранимой процедуры.
    #39337508
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nikgogolev,
Изучал без выводов, как другие загружают?
...
Рейтинг: 0 / 0
Java, Firebird, пустой ResultSet из хранимой процедуры.
    #39341080
Nikgogolev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если, кому интересно:
Сымитировал ситуацию под PostgreSQL:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CREATE OR REPLACE FUNCTION public.post_sel()
    RETURNS refcursor
    LANGUAGE 'plpgsql'
AS $function$
declare 
mycursor refcursor;
begin
open mycursor FOR SELECT * FROM public.post;
return mycursor;
end
$function$;


на Java проверил через консольное приложение:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
public class JavaWithPostgreSQL {
    private static final String ClassDrive="org.postgresql.Driver";
    private static final String URL_Connect="jdbc:postgresql://localhost:5432/postgres";
    private static  Statement Statmt=null;
    private static CallableStatement cstmt=null;
    private static  ResultSet rs = null;
    public static Connection con;
    
    public static void main(String[] args) 
    {              
    try {
            Class.forName(ClassDrive);
            try {
                con = DriverManager.getConnection(URL_Connect, "postgres", "1");
            } catch (SQLException ex) { Logger.getLogger(JavaWithPostgreSQL.class.getName()).log(Level.SEVERE, null, ex);}   
        } 
        catch (ClassNotFoundException ex){ ex.printStackTrace();}           
    
    String query="{  ?=call public.post_sel()}";
            try {
               con.setAutoCommit(false);
               cstmt = con.prepareCall(query);
               cstmt.registerOutParameter(1, Types.OTHER);
               cstmt.execute(); 
               rs=(ResultSet) cstmt.getObject(1);
            } catch (SQLException ex) {  Logger.getLogger(JavaWithPostgreSQL.class.getName()).log(Level.SEVERE, null, ex);  }       
    System.out.println("BEGIN");
    boolean bNext=false;       
        try {
                bNext=rs.next(); 
                while(bNext)
                {
                    System.out.print(rs.getInt("id"));
                    System.out.print("__");
                    System.out.println(rs.getString("naim"));
                    bNext=rs.next();
                }
            } catch (SQLException ex)   { ex.printStackTrace(); }  
    System.out.println("END");   
    }      
}

Все замечательно работает...
с тем-же кодом, но при подключении к Firebird-у не работает. Грустно. Не нашел в Инете примера получения из хранимой процедуры - выборки, только запросы, где тело запроса в String-е. Может связка Java+Firebird не так популярна? Ещё чуток покопаю.
...
Рейтинг: 0 / 0
Java, Firebird, пустой ResultSet из хранимой процедуры.
    #39341128
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nikgogolev,
Ты в какой то параллельной вселенной?
Я тебе дал поиск с тем чтобы ты сказал: "в форуме нет примера возвращения списка из хранимки. Перерыл весь. Помогите!".

А вы сам собой там бормочите.
...
Рейтинг: 0 / 0
Java, Firebird, пустой ResultSet из хранимой процедуры.
    #39341223
Nikgogolev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,
Форум я внимательно просмотрел ещё до того как задать вопрос.
Повторно прочитал, по поиску.

Проблема только в получении из хранимой процедуры выборки в ResultSet, при работе с Firebird.
При задании текста запроса в Java-программе - проблем с ResultSet - НЕТ.
Все остальные запросы в связке Java- Firebird работают без проблем.

Если я туплю, ткните носом - где. Спасибо.
...
Рейтинг: 0 / 0
Java, Firebird, пустой ResultSet из хранимой процедуры.
    #39341462
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NikgogolevЕсли я туплю, ткните носом - где.
Использование хранимой процедуры как источника данных - уникальная фича Firebird. Поэтому, естественно, ни запрос call, ни CallableStatement к этому не готовы. Так что используйте select и не выпендривайтесь.
...
Рейтинг: 0 / 0
Java, Firebird, пустой ResultSet из хранимой процедуры.
    #39341576
Nikgogolev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,
Спасибо за ответ. К сожалению, в явном виде - это нигде не прописано, в том числе и в официальной документации.
Буду, дальше думать. :-)
...
Рейтинг: 0 / 0
Java, Firebird, пустой ResultSet из хранимой процедуры.
    #39341732
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NikgogolevDimitry Sibiryakov,
Спасибо за ответ. К сожалению, в явном виде - это нигде не прописано, в том числе и в официальной документации.
Буду, дальше думать. :-)
- приведи рабочий код с возвратом строк по select хранимка.
- если код будет рабочий, то приведи аргументы чем он не устраивает против call хранимка.
...
Рейтинг: 0 / 0
Java, Firebird, пустой ResultSet из хранимой процедуры.
    #39341775
Nikgogolev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,
1) в первом посте указан рабочий код через query="select... ";
2) через "?=call Post_sel" выборку не получил.
3) (чем не устраивает) перенос SQL-кода с web-сервера на SQL-сервер обусловлен разделением логики работы с данными и их обработкой (древовидные структуры данных и связанные с ними задачи) и логикой представления данных пользователю.

Надеюсь объяснил понятно.
...
Рейтинг: 0 / 0
Java, Firebird, пустой ResultSet из хранимой процедуры.
    #39341782
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nikgogolev,
не очень понятно объяснил.
Я тоже поискал то что ты ищешь минут 20. Не нашёл(.
...
Напиши конкретно чем не устроила select хранимка, т.к. при вызове call хранимка разница будет только в одной строке. Так?
Весь остальной код одинаков?
Напиши рядом два кода. "As is to be" - эту фразу все знают.
...
Рейтинг: 0 / 0
Java, Firebird, пустой ResultSet из хранимой процедуры.
    #39341785
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nikgogolev,
такое работает?
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
try (Connection con = DriverManager.getConnection(..........);
CallableStatement proc = con.prepareCall("{call public.post_sel()}");) {
ResultSet rs = proc.executeQuery();
 rs.next();
System.out(rs.getString(1));

} catch (SQLException ex) {
            ex.printStackTrace();
}
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Java, Firebird, пустой ResultSet из хранимой процедуры.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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