=?iso-8859-2?q?problem_z_JDBC_(za_du=BFo_rekord=F3w=3F=3F)?=
=?iso-8859-2?q?=A3ukasz_Nowicki?= - 02-02-2007 00:10
=?iso-8859-2?q?problem_z_JDBC_(za_du=BFo_rekord=F3w=3F=3F)?=
witam!!
napisałem aplikację, coś w rodzaju przeglądarki tabel z bazy MsSQL 2000, ktora wyszukuje odpowiednie rekordy pasujące do ustawionego filtra. samo wyszukiwanie w bazie i pobieranie odpowiednich rekordów sprowadza się do poniższego kodu :
rs = dbStmt.executeQuery(query.toString());
while (rs.next()) { events[x / 250].add(getMessage(rs.getInt(1),rs.getInt(2) ,rs.getInt(3),rs.getInt(4) ,rs.getInt(5) ,new String(rs.getDate(6) + " " +rs.getTime(6)) ,rs.getString(7), x)); id_zd[x++] = rs.getInt(8); }
problem polega na tym, ze jak ustawię filtry tak, żeby znajdował nie wielka ilość rekordów to wszystko działa ok, ale gdy ma mi znaleźć większą ich ilość to wyrzuca wyjątek : Invalid state, ResultSet object is close.
i teraz tak się zastanwiam czy to jest taka możliwość że ResultSet ma jakąś swoją ograniczoną pojemność ?? czy może jednak spowodowane jest to blędami w składni ?
będę bardzo wdzięczny za jakąkolwiek pomoc lub podpowiedź
pozdrawiam ŁN
Brzezi - 02-02-2007 00:10
czw, 01 lut 2007 o 12:12 GMT, Łukasz Nowicki napisał(a):
> i teraz tak się zastanwiam czy to jest taka możliwość że ResultSet ma > jakąś swoją ograniczoną pojemność ??
Nie spotkalem sie jeszcze z taki przypadkiem...
> czy może jednak spowodowane jest > to blędami w składni ?
bez kodu trudno cos powiedziec...
Pozdrawiam Brzezi -- [ E-mail: brzezi@enter.net.pl ][ If it weren't for the last minute, ] [ Ekg: #3781111 ][ nothing would ever get done. ] [ LinuxUser: #249916 ][ ]
Krzysztof Wolny - 03-02-2007 00:02
Łukasz Nowicki wrote:
> problem polega na tym, ze jak ustawię filtry tak, żeby znajdował nie > wielka ilość rekordów to wszystko działa ok, ale gdy ma mi znaleźć > większą ich ilość to wyrzuca wyjątek : Invalid state, ResultSet object > is close. > > i teraz tak się zastanwiam czy to jest taka możliwość że ResultSet ma > jakąś swoją ograniczoną pojemność ?? czy może jednak spowodowane jest > to blędami w składni ?
jakby to byly bledy w zapytaniu to bylby raczej inny wyjatek. sprawdz moze czy jest jakas wartosc graniczna, powyzej ktorej to leci. no i czy jest to w 100% powtarzalne. i czy na innych zapytaniach tez tak sie dzieje.
-- ================================ Krzysztof Wolny
[ http://rtfm.bsdzine.org ][ http://tiny.pl/g776 ]
O: No bo normalnie to każdy czyta z góry na dół... P: Dlaczego ??? O: Pisanie nad cytatem ! P: Co należy do bardziej wkurzających obyczajów niektórych ludzi ?
redi - 03-02-2007 00:02
=?iso-8859-2?q?Re:_problem_z_JDBC_(za_du=BFo_rekord=F3w=3F=3F )?=
Bardzo mozliwe, ja mialem podobny problem przy polaczeniu z baza i iloscia executeQuery() - tutaj tez jest limit wykonywanych polecen - chyba cos kolo 16380. Sprawdz czy ten blad jest powtarzalny.
=?iso-8859-2?q?=A3ukasz_Nowicki?= - 03-02-2007 00:02
=?iso-8859-2?q?Re:_problem_z_JDBC_(za_du=BFo_rekord=F3w=3F=3F )?=
bo mi przyszło do głowy jeszcze coś takiego : bo wcześniej robię zapytanie " SELECT COUNT(*) ... " i gdzieś kiedyś o tym czytałem że przy duzej ilość rekordów operacja ta może zając serwerowi bazy trochę czasu, więc może to wszystko działa tak, że po odpytaniu o COUNT baza zaczyna zliczać a w miedzy czasie program odpytuje bazę drugi raz już o konkretne rekordy i wtedy baza nie reaguje przez co program traktuje to jako brak danych... ale to tylko taka moja skromna teoria :)
sprobuję to przerobić tak żeby nie odpytywać o COUNT i sprawdzę czy to pomoże :)
pozdrawiam ŁN
Twelve Hungry Mammoths - 03-02-2007 00:02
On Thu, 01 Feb 2007 12:12:43 +0100, Łukasz Nowicki <pieckowo@wp.pl> wrote: > > problem polega na tym, ze jak ustawię filtry tak, żeby znajdował nie > wielka ilość rekordów to wszystko działa ok, ale gdy ma mi znaleźć > większą ich ilość to wyrzuca wyjątek : Invalid state, ResultSet object > is close.
z tego co pamietam ze swoich dosc dawnych kontaktow z JDBC taki wyjatek lecial, gdy na tym samym Connection czy Statement, z ktorego otrzymalismy ResultSet, wykonalismy kolejne zapytanie. wtedy wyniki poprzedniego sa po prostu usuwane i z takiego ResultSet nie da sie juz nic odczytac.
pzdr szeryf
=?iso-8859-2?q?=A3ukasz_Nowicki?= - 03-02-2007 00:02
=?iso-8859-2?q?Re:_problem_z_JDBC_(za_du=BFo_rekord=F3w=3F=3F )?= > z tego co pamietam ze swoich dosc dawnych kontaktow z JDBC taki wyjatek > lecial, gdy na tym samym Connection czy Statement, z ktorego otrzymalismy > ResultSet, wykonalismy kolejne zapytanie. wtedy wyniki poprzedniego sa po > prostu usuwane i z takiego ResultSet nie da sie juz nic odczytac.
no właśnie to może być to ! :) bo tak poczytałem jeszcze trochę odnośnie Connection i może być że tutaj tkwi problem, bo ja mam zrobione to w ten sposób, że stworzyłem sobie klasę DB.class,w której stworzyłem sobie różne metody do "kontaktu" z bazą. mam w niej dwie metody : db_con() i db_close(), które odpowiednio tworzą lub zamykają połączenie z bazą tworząc obiekt na dynamicznej zmiennej :
Connection dbCon;
tylko sprawa wygląda tak, że obiektów klasy DB mam kilka w różnych miejscach aplikacji i czy to nie bedzie tak, że wszystkie te obiekty będą nawzajem sobie blokowały połączenie do bazy ? choć moim zdaniem nie powinno się tak dziać gdyż dbCon nie jest static, ale tu mogę się mylić :)
bo jeżeli się nawzajem blokują to chyba najrozsądniejszym rozwiązaniem tego problemu będzie stworzenie ConnectionPool, prawda ?? chyba, że są jakieś inne prostsze sposoby ??
pozdrawiam ŁN
Adam Sikora - 04-02-2007 00:11
Łukasz Nowicki napisał(a): >> z tego co pamietam ze swoich dosc dawnych kontaktow z JDBC taki wyjatek >> lecial, gdy na tym samym Connection czy Statement, z ktorego otrzymalismy >> ResultSet, wykonalismy kolejne zapytanie. wtedy wyniki poprzedniego sa po >> prostu usuwane i z takiego ResultSet nie da sie juz nic odczytac. >
Owszem, wykonanie kolejnego zapytania na Statement niszczy poprzedni ResultSet, ale wykonanie kolejnego zapytania na tym samym połączeniu (ale innym Statement) nie niszczy.
> no właśnie to może być to ! :) bo tak poczytałem jeszcze trochę > odnośnie Connection i może być że tutaj tkwi problem, bo ja mam > zrobione to w ten sposób, że stworzyłem sobie klasę DB.class,w której > stworzyłem sobie różne metody do "kontaktu" z bazą. mam w niej dwie > metody : db_con() i db_close(), które odpowiednio tworzą lub zamykają > połączenie z bazą tworząc obiekt na dynamicznej zmiennej : > > Connection dbCon; > > > tylko sprawa wygląda tak, że obiektów klasy DB mam kilka w różnych > miejscach aplikacji i czy to nie bedzie tak, że wszystkie te obiekty > będą nawzajem sobie blokowały połączenie do bazy ? choć moim zdaniem > nie powinno się tak dziać gdyż dbCon nie jest static, ale tu mogę się > mylić :)
Nie wiem jak to jest z innymi bazami, ale MSSQL nie potrafi na jednym połączeniu obsługiwać 2 zapytań. Z punktu widzenia Jawy tego nie widać bo jdbc omija ten problem. Jeśli utworzysz statement i bedziesz zasysał dane, to one beda na bieżąco ściągane z SQLa. Jeśli wykonasz drugiego statementa, to dane z pierwszego zostaną najpierw w całości zassane żeby ich nie stracić (jTDS tworzy pliki tymczasowe do tego). Także uważaj tutaj, bo jak pierwsze zapytanie wróci milion rekordów a drugie jeden to przed dosatniem tego jednego bedziesz czekał na ten milion.
> > bo jeżeli się nawzajem blokują to chyba najrozsądniejszym rozwiązaniem > tego problemu będzie stworzenie ConnectionPool, prawda ?? > chyba, że są jakieś inne prostsze sposoby ?? -- http://www.bykom-stop.avx.pl/ Jabber: keiichi@jabber.aster.pl
=?iso-8859-2?q?=A3ukasz_Nowicki?= - 06-02-2007 00:04
=?iso-8859-2?q?Re:_problem_z_JDBC_(za_du=BFo_rekord=F3w=3F=3F )?= > Owszem, wykonanie kolejnego zapytania na Statement niszczy poprzedni > ResultSet, ale wykonanie kolejnego zapytania na tym samym połączeniu > (ale innym Statement) nie niszczy.
no własnie tak mi się wydawało, że to tak działa... ogólnie problem rozwiązałem w ten sposób, że zrezygnowałem z odpytywania bazy o ilość pasujących rekrodów, a odpytuje od razu o rekordy i tablice z wynikami tworzę dynamicznie :)
i zaczęło działać tak jak chciałem :)
pozdrawiam i dzięki za podpowiedzi ŁN
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
Wydajność baz danych w zależności od poziomu izolacji ANSI/ISO
Czy zna (obsługuje) ktoś program Iso Draw ?
MYSQL - kodowanie w ISO-PL
strona plus baza w iso do utf-8
Kodowanie: z iso na utf
mysql i mysql-front, problem
String line; if (line=="cos"){...}....problem
Problem z wartościami w MySQL :( [ MySQL and ASP and VBScript ]
[PGSQL] czy ktos mial problemy z initdb pgsql 8.1 ?
[MySQL] Problem z zapisem danych w bazie danych
zanotowane.pldoc.pisz.plpdf.pisz.plabsolwenci.keep.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|