powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / org.firebirdsql.jdbc.FBSQLException: Result set is already closed
65 сообщений из 65, показаны все 3 страниц
org.firebirdsql.jdbc.FBSQLException: Result set is already closed
    #39229927
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот такие ошибки в рандомное время возникают в web приложении (причем не у меня, а вижу в логах при работе пользователей)

org.firebirdsql.jdbc.FBSQLException: Result set is already closed.
org.firebirdsql.jdbc.FBSQLException: The result set is closed

одна после другой иногда возникают во время построения таблицы на основе запроса к базе (т.е. наверное можно сказать, что отрисовка в html происходит "продолжительное" время)

все подобное "рисование" выполняю следующим образом - создаю коннект, statement, resultset, "рисую" (через while (resultset.next()) ), по окончании закрываю вообще все

может идеологически это неверно и несколько одновременных запросов страницы приводят к тому, что тот что отрисовался раньше закрывает первый!?

просто не могу понять почему такое происходит, в самой "отрисовке" только один единственный набор объектов, включая resultset
...
Рейтинг: 0 / 0
org.firebirdsql.jdbc.FBSQLException: Result set is already closed
    #39229929
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wolverinпо окончании закрываю вообще все
Пул используется?
...
Рейтинг: 0 / 0
org.firebirdsql.jdbc.FBSQLException: Result set is already closed
    #39229933
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

а что дает? мне не требуется держать несколько соединений - нарисовал, закрыл, отключился
но как то получается что конкурирующие потоки взаимодействуют...
...
Рейтинг: 0 / 0
org.firebirdsql.jdbc.FBSQLException: Result set is already closed
    #39229935
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
т.е. мне казалось что в session я имею дело с отдельно созданным resultset
даже как это проверить не пойму, потому как на деле отрисовка конечно же выполняется быстро, но когда работает куча пользователей нет нет да выскочит вот эта беда
...
Рейтинг: 0 / 0
org.firebirdsql.jdbc.FBSQLException: Result set is already closed
    #39229937
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczПул используется?
) нет!
...
Рейтинг: 0 / 0
org.firebirdsql.jdbc.FBSQLException: Result set is already closed
    #39229940
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wolverinа что дает?

В web приложении-то? Это даёт всё. В том числе валидацию соединений.

wolverinно как то получается что конкурирующие потоки взаимодействуют...
На основе чего сделан такой вывод?
...
Рейтинг: 0 / 0
org.firebirdsql.jdbc.FBSQLException: Result set is already closed
    #39229941
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wolverinт.е. мне казалось что в session я имею дело с отдельно созданным resultset
Session здесь вообще при чем?
...
Рейтинг: 0 / 0
org.firebirdsql.jdbc.FBSQLException: Result set is already closed
    #39229942
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wolverin,

Ошибка вылетает в момент первого использования ResultSet (в начале цикла) или в середине, уже после того как несколько записей вычитано?
Закрываете руками или через AutoClosable? Stacktrace почему не привели?
...
Рейтинг: 0 / 0
org.firebirdsql.jdbc.FBSQLException: Result set is already closed
    #39229943
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот как конкретно выглядит текст

но конкретно ВСЕГДА эта строка, а по ней вообще комментарий в теле цикла
at org.apache.jsp.ИМЯ-СТРАНИЦЫ-С-ОШИБКОЙ_jsp._jspService(ИМЯ-СТРАНИЦЫ-С-ОШИБКОЙ_jsp.java from :77)

Код: 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.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
[#|2016-05-05T09:34:52.263+0600|SEVERE|glassfish3.1.2|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=28;_ThreadName=Thread-2;|org.firebirdsql.jdbc.FBSQLException: Result set is already closed.
        at org.firebirdsql.jdbc.FBStatementFetcher.checkClosed(FBStatementFetcher.java:232)
        at org.firebirdsql.jdbc.FBStatementFetcher.fetch(FBStatementFetcher.java:187)
        at org.firebirdsql.jdbc.FBStatementFetcher.next(FBStatementFetcher.java:137)
        at org.firebirdsql.jdbc.AbstractResultSet.next(AbstractResultSet.java:250)
        at org.apache.jsp.ИМЯ-СТРАНИЦЫ-С-ОШИБКОЙ_jsp._jspService(ИМЯ-СТРАНИЦЫ-С-ОШИБКОЙ_jsp.java from :77)
        at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:111)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:770)
        at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:411)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:473)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:377)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:770)
        at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1550)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:343)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
        at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161)
        at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
        at com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317)
        at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195)
        at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:860)
        at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:757)
        at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1056)
        at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:229)
        at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
        at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
        at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
        at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
        at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
        at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
        at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
        at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
        at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
        at java.lang.Thread.run(Thread.java:662)
|#]

[#|2016-05-05T09:34:52.278+0600|SEVERE|glassfish3.1.2|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=19;_ThreadName=Thread-2;|org.firebirdsql.jdbc.FBSQLException: The result set is closed
        at org.firebirdsql.jdbc.AbstractResultSet.checkCursorMove(AbstractResultSet.java:217)
        at org.firebirdsql.jdbc.AbstractResultSet.next(AbstractResultSet.java:249)
        at org.apache.jsp.ИМЯ-СТРАНИЦЫ-С-ОШИБКОЙ_jsp._jspService(ИМЯ-СТРАНИЦЫ-С-ОШИБКОЙ_jsp.java from :77)
        at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:111)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:770)
        at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:411)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:473)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:377)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:770)
        at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1550)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:343)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
        at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161)
        at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
        at com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317)
        at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195)
        at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:860)
        at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:757)
        at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1056)
        at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:229)
        at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
        at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
        at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
        at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
        at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
        at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
        at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
        at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
        at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
        at java.lang.Thread.run(Thread.java:662)
...
Рейтинг: 0 / 0
org.firebirdsql.jdbc.FBSQLException: Result set is already closed
    #39229947
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczwolverin,

Ошибка вылетает в момент первого использования ResultSet (в начале цикла) или в середине, уже после того как несколько записей вычитано?
Закрываете руками или через AutoClosable? Stacktrace почему не привели?
получается приблизительно в середине, после вычитки нескольких записей, закрываю руками после выхода из цикла
...
Рейтинг: 0 / 0
org.firebirdsql.jdbc.FBSQLException: Result set is already closed
    #39229958
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczSession здесь вообще при чем?
поскольку новичок - делаю безумные предположения (
а вообще через переменные session "обмениваюсь" между jsp объектами, но открытие и закрытие только в пределах "цикла"
...
Рейтинг: 0 / 0
org.firebirdsql.jdbc.FBSQLException: Result set is already closed
    #39229961
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wolverinно открытие и закрытие только в пределах "цикла"
дай псевдо код условный. И где он расположен.
...
Рейтинг: 0 / 0
org.firebirdsql.jdbc.FBSQLException: Result set is already closed
    #39229962
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123дай псевдо код условный. И где он расположен.

вот так немного упрощенно если

Код: 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.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
                DataSetD dsd = (DataSetD)session.getAttribute("dataset");
                if (dsd.getDolgDetail(l_schet, dBeg, dEnd)) {
                    float summa = 0, summa_opl = 0, sum = 0, sum_opl = 0;
                    GregorianCalendar data = new GregorianCalendar();
                    int year = data.get(GregorianCalendar.YEAR);
                    int year_old = year;
                    int year_first = year;
                    SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy");

                    try {
                        while (dsd.rs.next()) {
                            data.setTime(dsd.rs.getDate("datedoc"));
                            year = data.get(GregorianCalendar.YEAR);
                            if (year != year_old) {
                                %><tr align="center">
                                    <td><B>Итого</B></td>
                                    <td></td>
                                    <td><B><%= sum %></B></td>
                                    <td><B><%= sum_opl %></B></td>
                                </tr><%
                                sum = 0;
                                sum_opl = 0;
                                year_old = year;
                            }
                            sum += dsd.rs.getFloat("summa");
                            %><tr>
                                <td><%= dsd.rs.getString("tarif_group") %></td>
                                <td align="center"><%= sdf.format(dsd.rs.getDate("datedoc")) %></td>
                                <%--<td align="right"><%if(rs.getString("summa") != null) %><%=rs.getFloat("summa")%></td>
-------------------НОМЕР СТРОКИ ПОЧЕМУ ТО ВОТ ЗДЕСЬ^^^^^^^^^^^^^^^^^-------------------
                                <td align="right"><%if(rs.getString("summa_opl") != null) %><%=rs.getFloat("summa_opl")%></td>--%>
                                <td align="right"><%= dsd.rs.getFloat("summa") %></td>
                                <td align="right"><%= dsd.rs.getFloat("summa_opl") %></td>
                            </tr><%
                        }
                        //dds.rs.close();
                        if (year != year_first) {
                            %><tr align="center">
                                <td><B>Итого</B></td>
                                <td></td>
                                <td><B><%= sum %></B></td>
                                <td><B><%= sum_opl %></B></td>
                            </tr> <%
                        }
                        %><tr align="center">
                            <td><B>Всего</B></td>
                            <td></td>
                            <td><B><%= summa %></B></td>
                            <td><B><%= summa_opl %></B></td>
                        </tr><%
                        //session.setAttribute("AccessId", 3);
                    } catch (Exception e) {
                        e.printStackTrace();
                        %><p>Ошибка операции</p><%
                    }
                }
                else { %><p>Соединение не установлено</p><% }
                dsd.Disconnect();
...
Рейтинг: 0 / 0
org.firebirdsql.jdbc.FBSQLException: Result set is already closed
    #39229964
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сам дисконект
Код: 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.
    public void Disconnect() {
        try {
            if (rs != null) {
                if (!rs.isClosed()) rs.close();
                rs = null;
            }
        }
        catch (SQLException e) {
            e.printStackTrace();
        }

        try {
            if (s != null) {
                if (!s.isClosed()) s.close();
                s = null;
            }
        }
        catch (SQLException e) {
            e.printStackTrace();
        }

        try {
            if (c != null) {
                //c.rollback();
                if (!AutoCommit) c.commit();
                if (!c.isClosed()) c.close();
                c = null;
            }
        }
        catch (SQLException e) {
            e.printStackTrace();
        }
    }
...
Рейтинг: 0 / 0
org.firebirdsql.jdbc.FBSQLException: Result set is already closed
    #39229977
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wolverin
Код: java
1.
 DataSetD dsd = (DataSetD)session.getAttribute("dataset");


AFAIK DataSet не потокобезопасный объект. В сессию нельзя.
...
Рейтинг: 0 / 0
org.firebirdsql.jdbc.FBSQLException: Result set is already closed
    #39229985
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123AFAIK DataSet не потокобезопасный объект. В сессию нельзя.
формально конечно DataSetD dsd не сам dataset, а просто обертка с инициализированными параметрами для соединения, сами объекты в проблемном jsp создаются и конектятся в dsd.getDolgDetail
...
Рейтинг: 0 / 0
org.firebirdsql.jdbc.FBSQLException: Result set is already closed
    #39229989
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wolverin,
какая разница. В одном потоке ты создал, во втором прибил. А ссылки и работающий JSP в другом.
...
Рейтинг: 0 / 0
org.firebirdsql.jdbc.FBSQLException: Result set is already closed
    #39229993
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wolverin,
грубо, JSP это VIEW.
При загрузке открой коннект и прибей после отрисовки.
...
Рейтинг: 0 / 0
org.firebirdsql.jdbc.FBSQLException: Result set is already closed
    #39229994
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

хотя конечно объявлено как public class DataSetD extends DataSet

и как тогда нужно делать?
...
Рейтинг: 0 / 0
org.firebirdsql.jdbc.FBSQLException: Result set is already closed
    #39229996
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123При загрузке открой коннект и прибей после отрисовки.
так он и прибевается после отрисовки и создается перед ней
...
Рейтинг: 0 / 0
org.firebirdsql.jdbc.FBSQLException: Result set is already closed
    #39229999
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wolverinи как тогда нужно делать?
1.
При загрузке открой коннект и прибей после отрисовки.
2. бины
3. пул
...
Рейтинг: 0 / 0
org.firebirdsql.jdbc.FBSQLException: Result set is already closed
    #39230003
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wolverinтак он и прибевается после отрисовки и создается перед нейпо коду не видно. Эта часть у тебя спрятана.
...
Рейтинг: 0 / 0
org.firebirdsql.jdbc.FBSQLException: Result set is already closed
    #39230004
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как теперь это все развидеть-то? Просто слов нет. Энтузиазма много и только.

ResultSet не место в Session. Разве только если использовать какой-нибудь WebRowSet, отсоединенный от базы.
То что объект находится в Session никак не защищает от конкурентного доступа. Один пользователь может открыть две странцы в одной сессии. Это скорее всего и является причиной ошибки.

JSP надо использовать в виде HTML шаблона, а не в миксуя Java и HTML в безобразную кашу двух языков (а если ещё и JavaScript добавить?).
Если так кортит использовать JDBC прямо в странице, то есть же SQL в JSTL
http://www.tutorialspoint.com/jsp/jstl_sql_query_tag.htm

Ресурсы надо закрывать в блоке finally, а не в if..else

Срочно к изучению
JSP JSTL
JSP Expression Language
Model View Controller
finally
AutoCloseable (try with resource)
...
Рейтинг: 0 / 0
org.firebirdsql.jdbc.FBSQLException: Result set is already closed
    #39230009
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123wolverinтак он и прибевается после отрисовки и создается перед нейпо коду не видно. Эта часть у тебя спрятана.
тут создаю
if (dsd.getDolgDetail(l_schet, dBeg, dEnd))

тут убиваю
dsd.Disconnect();

конкретно

Код: 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.
42.
    public boolean getDolgDetail(String l_schet, String dBeg, String dEnd) {

        return getOpen("select ");
    }


    public boolean getOpen(String sql) {

        boolean res = false;

        if (rs == null) {
            if (Connect())
                res = Open(sql) != null;
        }
        else res = Open(sql) != null;

        return res;
    }


    public ResultSet Open(String sql) {

        try {
            if (rs != null)
                if (!rs.isClosed()) rs.close();
        }
        catch (SQLException e) {
            e.printStackTrace();
        }
        finally {
            rs = null;
        }

        try {
            if (s != null) rs = s.executeQuery(sql);
        }
        catch (SQLException e) {
            e.printStackTrace();
        }

        return rs;
    }
...
Рейтинг: 0 / 0
org.firebirdsql.jdbc.FBSQLException: Result set is already closed
    #39230013
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а ну и сам коннект
Код: 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.
42.
43.
44.
45.
46.
    public boolean Connect(){

        try {
            Class.forName("org.firebirdsql.jdbc.FBDriver");
        }
        catch (ClassNotFoundException e) {
            e.printStackTrace();
            //System.out.println("Firebird JCA-JDBC driver not found in class path");
            return false;
        }

        Driver d = null;
        try {
            d = DriverManager.getDriver(database);
        }
        catch (SQLException e) {
            e.printStackTrace();
            //System.out.println ("Unable to find Firebird JCA-JDBC driver among the registered drivers.");
            return false;
        }

        c = null;
        try {
            Properties prop = new Properties ();
            prop.put("user", user);
            prop.put("password", password);
            prop.put("lc_ctype", "WIN1251");

            c = d.connect(database, prop);
            c.setAutoCommit(AutoCommit);
        }
        catch (SQLException e) {
            e.printStackTrace();
            return false;
        }

        try {
            s = c.createStatement(resultSetType, resultSetConcurrency);
        }
        catch (SQLException e) {
            e.printStackTrace();
            return false;
        }

        return true;
    }
...
Рейтинг: 0 / 0
org.firebirdsql.jdbc.FBSQLException: Result set is already closed
    #39230015
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczто есть же SQL в JSTL
Во! Точно!)
...
Рейтинг: 0 / 0
org.firebirdsql.jdbc.FBSQLException: Result set is already closed
    #39230019
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczResultSet не место в Session. Разве только если использовать какой-нибудь WebRowSet, отсоединенный от базы
так он и отсоединен от базы...
сейчас попробую открыть страницу одним пользователем...
...
Рейтинг: 0 / 0
org.firebirdsql.jdbc.FBSQLException: Result set is already closed
    #39230027
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wolverinтак он и отсоединен от базы...
while (dsd.rs.next()) {
dsd нельзя в сессию. Т.к. всё что у него внутри до 5-го колена должно быть потокобезопасно....даже умершее и отсоединённое.
...
Рейтинг: 0 / 0
org.firebirdsql.jdbc.FBSQLException: Result set is already closed
    #39230034
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wolverinтак он и отсоединен от базы...

Какое самоуверенное заявление. И где же в коде отсоединение ResultSet от базы?
...
Рейтинг: 0 / 0
org.firebirdsql.jdbc.FBSQLException: Result set is already closed
    #39230040
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczwolverinтак он и отсоединен от базы...

Какое самоуверенное заявление. И где же в коде отсоединение ResultSet от базы?
dsd.Disconnect();

похоже да, если в рамках одной сессии попытаться открыть одну и ту же страницу, то возникает конфликт
...
Рейтинг: 0 / 0
org.firebirdsql.jdbc.FBSQLException: Result set is already closed
    #39230047
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wolverindsd.Disconnect();

Дык после этого нельзя читать ResultSet. Это не "отсоединение" данных. Это закрытие соединения вообще.
Под "отсоединением" я имел ввиду вычитку данных в куда-либо, которое можно использовать без соединения с БД и безопасно поместить в сессию.
...
Рейтинг: 0 / 0
org.firebirdsql.jdbc.FBSQLException: Result set is already closed
    #39230053
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczwolverindsd.Disconnect();

Дык после этого нельзя читать ResultSet. Это не "отсоединение" данных. Это закрытие соединения вообще.
Под "отсоединением" я имел ввиду вычитку данных в куда-либо, которое можно использовать без соединения с БД и безопасно поместить в сессию.
да там только на отображение и все, по моему вроде как шаблон и получается.
мне и не нужно читать ResultSet после закрытия, в следующий раз оно создастся по новой

надо как то защититься от попытки открыть одну и ту же страницу одновременно в одной сессии...
...
Рейтинг: 0 / 0
org.firebirdsql.jdbc.FBSQLException: Result set is already closed
    #39230056
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wolverinнадо как то защититься от попытки открыть одну и ту же страницу одновременно в одной сессии...
Пользователь имеет право сделать Alt+Enter.
Потом тебе по башке даст.
...
Рейтинг: 0 / 0
org.firebirdsql.jdbc.FBSQLException: Result set is already closed
    #39230065
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wolverinда там только на отображение и все, по моему вроде как шаблон и получается.

Самоуверенности вам не занимать. Ну, если не интересует критика, то умываю руки. Удачи тому несчастному кому придется править этот код.

wolverinмне и не нужно читать ResultSet после закрытия, в следующий раз оно создастся по новой

Удаляйте его из Session, сразу как получили, перед тем как использовать. Это сведет шанс на шаринг к минимуму.

wolverinнадо как то защититься от попытки открыть одну и ту же страницу одновременно в одной сессии...
Ну, да, ну да. И кнопку back задизэйблить. Чтобы не повадно было. И вообще стоять у юзера за спиной и чуть что - линейкой по рукам, чтобы не нажимал куда не нужно.
...
Рейтинг: 0 / 0
org.firebirdsql.jdbc.FBSQLException: Result set is already closed
    #39230074
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,
я всегда за критику с любовью )
просто не вижу почему не шаблон - просто рисую jsp напрямую из RS и потом больше нигде никак не обрабатываю
удалять то можно, но это опять каждый раз логины-пароли-параметры-курсора/транзакции где то искать и по новой все в том же JSP инициализировать как в вашем примере по JSTL

от виндовых приложений осталось разумение что пока окно рисуется в однопоточном, то другие запросы не обрабатываются (
...
Рейтинг: 0 / 0
org.firebirdsql.jdbc.FBSQLException: Result set is already closed
    #39230081
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wolverinот виндовых приложений осталось разумение что пока окно рисуется в однопоточном, то другие запросы не обрабатываются (
))) из далека пришёл в веб вестимо.
...
Рейтинг: 0 / 0
org.firebirdsql.jdbc.FBSQLException: Result set is already closed
    #39230176
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wolverin,
а восьмую java отменили?
...
Рейтинг: 0 / 0
org.firebirdsql.jdbc.FBSQLException: Result set is already closed
    #39230245
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,

использую что есть на сервере
...
Рейтинг: 0 / 0
org.firebirdsql.jdbc.FBSQLException: Result set is already closed
    #39230247
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
короче я так понял надо просто еще одни класс с потомками оформить, чтобы отделить свойства от методов с объектами и все должно стать в ажуре уже передавая в сессию объекты со свойствами подключения.
...
Рейтинг: 0 / 0
org.firebirdsql.jdbc.FBSQLException: Result set is already closed
    #39230287
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wolverinсо свойствами подключения.
какими? Логин, pass что ли?
...
Рейтинг: 0 / 0
org.firebirdsql.jdbc.FBSQLException: Result set is already closed
    #39230456
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123wolverinсо свойствами подключения.
какими? Логин, pass что ли?
логин, пароль, параметры курсора, параметры транзакции, выбранная база при авторизации
...
Рейтинг: 0 / 0
org.firebirdsql.jdbc.FBSQLException: Result set is already closed
    #39230514
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ok
- перепиши на JSTL, alt+enter для 2х объектов в одной сессии и проверь свой баг.
...
Рейтинг: 0 / 0
org.firebirdsql.jdbc.FBSQLException: Result set is already closed
    #39230582
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Ok
- перепиши на JSTL, alt+enter для 2х объектов в одной сессии и проверь свой баг.
проблема еще и в том, что этот самый объект я вообще везде использую и закрытие резалсета может вообще происходить в сервелете, а вываливаться в ошибку уже по логике работы в этом жсп )
а теги ну только я вижу что меньше песанины в самом жсп

хорошо, но вот сервелет, в котором я проинициализирую глобальную переменную резалсет класса потокабезопасно или класс инициализируется единожды и методы post и get будут работать с одним резалсетом?
...
Рейтинг: 0 / 0
org.firebirdsql.jdbc.FBSQLException: Result set is already closed
    #39230608
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wolverin,
ну там же всё просто.
Вы отличаете новый экземпляр объекта от "взяди на него ссылку"?
- JSP и сервлеты работают в потоках. Java с некоторой версии отказалась от поддержки потокобезопасности. "Программист сам должен". Раньше был флаг для этого в API
- т.е. либо на каждый поток - свой коннект (область видимости - страничка),
- либо один коннект на сессию и нельзя раньше прибивать
- либо пул (попользовал и вернул).
Что тут сложного?
...
Рейтинг: 0 / 0
org.firebirdsql.jdbc.FBSQLException: Result set is already closed
    #39230610
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wolverinэтот самый объект я вообще везде использую и закрытие резалсета может вообще происходить в сервелете
т.е. вы по функционалу написали Пул ?
...
Рейтинг: 0 / 0
org.firebirdsql.jdbc.FBSQLException: Result set is already closed
    #39230617
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wolverin,
основная ошибка вот тут: 19138826
Остальное - неизбежные следствия, которые будут преследовать это приложение.
Лучше всего не пытаться отловить хвосты, а начать с начала, используя композицию. Датасет, включающий в себя транзакцию, резалтсет, а также и все методы для получения данных из базы - безусловное зло.
...
Рейтинг: 0 / 0
org.firebirdsql.jdbc.FBSQLException: Result set is already closed
    #39230624
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivanraДатасет, включающий в себя транзакцию, резалтсет, а также и все методы для получения данных из базы - безусловное зло.
только, сам Датасет - зло, это перебор).
...
Рейтинг: 0 / 0
org.firebirdsql.jdbc.FBSQLException: Result set is already closed
    #39230635
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

так все таки сервелет при обращении к нему создается каждый раз или происходит только обращение к методам?
...
Рейтинг: 0 / 0
org.firebirdsql.jdbc.FBSQLException: Result set is already closed
    #39230643
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123т.е. вы по функционалу написали Пул ?
нет, чтобы не писать каждый раз параметры соединения таскал его везде вместе с методами
сейчас параметры в отдельный объект, а датасет создаю и освобождаю в рамках страницы, но по сервелету вопрос остался
...
Рейтинг: 0 / 0
org.firebirdsql.jdbc.FBSQLException: Result set is already closed
    #39230651
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wolverinPetro123,
так все таки сервелет при обращении к нему создается каждый раз или происходит только обращение к методам?
обычный сервлет?
- у меня в одном проекте на init я беру из web.xml пароль, логин, ...
- потом
Код: java
1.
2.
3.
protected void doGet(HttpServletRequest request,...........
...
conn = DriverManager.getConnection(SCONN, DB_USER, DB_PASS);
...
Рейтинг: 0 / 0
org.firebirdsql.jdbc.FBSQLException: Result set is already closed
    #39230660
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wolverinнет, чтобы не писать каждый раз параметры соединения таскал его везде вместе с методами
2-3 строки на сервлет или JSP это немного.
Если у тебя логин один на всех (публичный пользователь как в пуле), то тем более пихать в сессию зачем?
...
Рейтинг: 0 / 0
org.firebirdsql.jdbc.FBSQLException: Result set is already closed
    #39230674
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

ну не 3, строчек 5-7, потом еще помнить надо где как должно работать, да уровни изолированности транзакций хотел потом дописать, параметр блокировок, а так создал потомка и всегда помнишь что в нем есть, т.к. прописан и инициализирован он в одном месте.
логин можно сказать один, но баз 2 вида, в первом только одна база для записи в определенные моменты, в остальное время иногда не дефолтное чтение приходится делать, во втором вообще 10ок баз, соединение к которым должны быть только читающими и не держать никаких блокировок и пишущих транзакций на сервере и тыды

словом очень упрощает, когда все реализовано на одном (сейчас на двух) классах их потомках для единообразия.

да сервелет обычный javax.servlet.annotation.WebServlet
...
Рейтинг: 0 / 0
org.firebirdsql.jdbc.FBSQLException: Result set is already closed
    #39230675
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wolverinпотом еще помнить надо где как должно работать, да уровни изолированности транзакций хотел потом дописать, параметр блокировок
"Не пиши на будущее, всё одно переписывать" (с)
- уровни не надо трогать никогда
- парам блокировок непонятно.
Итого что осталось? - правильно - велосипед.
...
Рейтинг: 0 / 0
org.firebirdsql.jdbc.FBSQLException: Result set is already closed
    #39230679
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wolverinсловом очень упрощает, когда все реализовано на одном (сейчас на двух) классах их потомках для единообразия.
ты не с дельфи начинал?
Ты пытаешься писать в его стиле. Создать свой DAC в виде ADOConnection\ADODataSet.
При увеличении проекта - задолбаешься в веб. Это не десктоп.
...
Рейтинг: 0 / 0
org.firebirdsql.jdbc.FBSQLException: Result set is already closed
    #39230684
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wolverinсоединение к которым должны быть только читающими и не держать никаких блокировок и пишущих транзакций на сервере
это надо тебе почитать и осмыслить.
Есть некоторые недоСУБД, в которых есть читающие транзакции и пишущие.
Т.е. эта фигня почему то должна быть прописана в коде.
Это отдельный вопрос.
...
Рейтинг: 0 / 0
org.firebirdsql.jdbc.FBSQLException: Result set is already closed
    #39230691
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123При увеличении проекта - задолбаешься в веб. Это не десктоп.
с дельфи vs c++
сейчас посмотрел свой FastCGI проект - вроде тоже создаю единожды параметры и все годно работает
ну а почему нельзя, вроде сами разработчики считаю что кошерно работать с 2мя транзакциями, мусор опять же не держит

на то и рассчитываю, что при разрастании можно будет одной строкой обходиться, которая просто сразу возвращает данные
...
Рейтинг: 0 / 0
org.firebirdsql.jdbc.FBSQLException: Result set is already closed
    #39230696
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а все таки интересно если я скажем в конструкторе сервелета проинициализирую резалтсет - они потом так же в одной сессии не наложатся друг на друга
...
Рейтинг: 0 / 0
org.firebirdsql.jdbc.FBSQLException: Result set is already closed
    #39230708
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wolverinа все таки интересно если я скажем в конструкторе сервелета проинициализирую резалтсет - они потом так же в одной сессии не наложатся друг на друга
тебе не интереснее узнать JSTL+JNDI?
Так и останешься в своём JSP навечно.
Удачи!
ЗЫ
В Java либо тащить на клиента только голые данные, либо один вариант выше от Sun JSTL.
Т.к. страничка может рисоваться до 5 минут кряду.
Это уже тут все знают.
...
Рейтинг: 0 / 0
org.firebirdsql.jdbc.FBSQLException: Result set is already closed
    #39230724
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

почему не интересно, я еще при первом упоминании открыл википедию, написано JSTL - библиотека тэгов, чем это должно помочь я не понимаю, ну красивее смотреться будет и что с того.

а сервелет у меня вообще по вашему же совету через AJAX ответы отдает в JS, вполне возможно это и создает ситуацию, когда один и тот же резалтсет пользуется.
...
Рейтинг: 0 / 0
org.firebirdsql.jdbc.FBSQLException: Result set is already closed
    #39230742
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wolverin,
вот заладил. Скажу тезисно, раз читать не умеешь:
- пихать дата сет в сессию нельзя. Либо 7 строк на страничке, либо
Apache Tomcat 6.0
JNDI Datasource HOW-TO
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<sql:query var="rs" dataSource="jdbc/TestDB">
select id, foo, bar from testdata
</sql:query>

<html>
  <head>
    <title>DB Test</title>
  </head>
  <body>

  <h2>Results</h2>
  
<c:forEach var="row" items="${rs.rows}">
    Foo ${row.foo}<br/>
    Bar ${row.bar}<br/>
</c:forEach>

  </body>
</html>


- делать тестовый пример по отрисовке странички на 10000 записей и результаты сюда вечером.
Это IMHO
Удачи!
...
Рейтинг: 0 / 0
org.firebirdsql.jdbc.FBSQLException: Result set is already closed
    #39230750
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

) это я понял еще на первой странице, датасета в сессии больше нет, теперь там только ВСЕ параметры конекта в объекте, который я запихиваю в датасет при инизиализации на каждой странице.

зы. мне без разницы сколько страница рисуется, хоть 10 минут, хотя у меня дефолтно выходит записей 10-20

меня волнует как работает сервелет - инициализация каждый раз при вызове или единожды и только ответы в пост и гет.
...
Рейтинг: 0 / 0
org.firebirdsql.jdbc.FBSQLException: Result set is already closed
    #39230767
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wolverin) это я понял еще на первой странице, датасета в сессии больше нет,

=== OK

теперь там только ВСЕ параметры конекта в объекте, который я запихиваю в датасет при инизиализации на каждой странице.

== POJO объект придумали в Java или Record в С++

зы. мне без разницы сколько страница рисуется, хоть 10 минут, хотя у меня дефолтно выходит записей 10-20

===== мы с этой ошибки начинали. ОК топик не про это в первом посте

меня волнует как работает сервелет - инициализация каждый раз при вызове или единожды и только ответы в пост и гет.

=== init единожды. Но не надо так писать, что если второй раз вдруг...То у тебя всё рухнет.
...
Рейтинг: 0 / 0
org.firebirdsql.jdbc.FBSQLException: Result set is already closed
    #39230768
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wolverin,
сервлет существует в одном экземпляре, и инициализируется 1 раз (если не вдаваться в подробности). Его методы post,get, и т.д. вызываются сервером из разных потоков (исключение - однопоточные сервера, но это скорее экзотика)
...
Рейтинг: 0 / 0
org.firebirdsql.jdbc.FBSQLException: Result set is already closed
    #39230780
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

про время это я к тому что и в других бы местах должно, а проявляется только здесь )

Petro123,
ivanra

спасибо, буду и это тогда переделывать
...
Рейтинг: 0 / 0
org.firebirdsql.jdbc.FBSQLException: Result set is already closed
    #39230784
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wolverinпро время
там тест элементарный.
2 окна. Пока отрисовка на одном (ds работает), запускаем или гасим второе.
...
На одном удаляем мастер, на втором в это время меняем чилдрен.
и т.д.
...
Рейтинг: 0 / 0
65 сообщений из 65, показаны все 3 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / org.firebirdsql.jdbc.FBSQLException: Result set is already closed
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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