Avatar billede chrede Nybegynder
11. december 2002 - 10:28 Der er 16 kommentarer og
1 løsning

Problemer med access (sql) og Java

Er der nogen der har nogen ide om hvorfor mit java program allokerer efter hvert udtræk (sql) og ikke frigiver det igen ?

DVS. mit program bliver tungere og tungere jo længere det kører, og alt hukommelse bliver først frigivet når programmet lukkes helt.
Avatar billede di8leva Nybegynder
11. december 2002 - 10:36 #1
strange...
du kan bruge:
System.gc();

før att "tvinga" Garbage Collectorn att køre, og se hvis det hjælper?
Avatar billede chrede Nybegynder
11. december 2002 - 10:39 #2
har prøvet... hjælper ikke!

Jeg har lige fundet ud af hukomelsen bliver frigivet når jeg lukker forbindelsen til databasen!
Avatar billede arne_v Ekspert
11. december 2002 - 10:39 #3
Prøv:
  * close connections/statements/resultset når du er færdig
    med at bruge dem
  * åbn altid resultset standard ikke noget med at markere
    dem så du kan scrolle både frem og tilbage
  * sæt diverse variable til null, når du ikke længere
    skal bruge dem
Avatar billede hsg Nybegynder
11. december 2002 - 10:39 #4
Hvad med dit ResultSet og Statement - bliver de lukket efter hver query?
Avatar billede arne_v Ekspert
11. december 2002 - 10:41 #5
Aha.

Så er det jo der hunden ligger begravet. Normalt
kan det ikke betale sig at getConnection og close
connection mange gange i et program (det er nemlig
ofte en dyr operation i sig selv), men prøv
og close statements/resultsets mellem brug.
Avatar billede chrede Nybegynder
12. december 2002 - 14:09 #6
Jeg har prøvet at sætte RS og Statement til Null inden hvert udtrækt (min dbklasser er en singelton) men det hjælper ikke!

Hvis jeg closer RS eller Statement så kan jeg ikke returnere RS
Avatar billede arne_v Ekspert
12. december 2002 - 18:51 #7
Du kan naturligvis først close result set og statement,
når du r færdig med at bruge dem.

Men du bør close dem lige så snart du er færdig med at
bruge dem.

Og at det er en singleton dbklasse skulle ikke
forhindre at du lukker dem.
Avatar billede chrede Nybegynder
12. december 2002 - 18:55 #8
hmm. ok... jeg roder lige lidt videre med det et par dage, så vender jeg tilbage!
Avatar billede chrede Nybegynder
12. december 2002 - 21:53 #9
nu har jeg kigget lidt på det igen. Det hjælper ikke at lave close() på resultset og statement, men det hjælper hvis jeg laver close() op connection!

Er jeg så tvunget til at lukke adgangen til databasen efter hver updatering/forespørgsel ? Det er jo ikke heldigt, da det at åbne en connection inden hver updatering/forespørgsel er temlig tidskrævende (i hvert fald på de maskiner vi bruger på min skole)
Avatar billede arne_v Ekspert
12. december 2002 - 21:57 #10
Det er ressource-krævende at åbne en database connection.

(derfor man bruger connection pools på servere, men det er
en anden historie)

Men det lyder som om du må leve med enten det memory forbrug
som det kræver at holde connection åben eller vente den tid
det tager at genetablere connection.

PS: Når du bruger Access må du bruge JDBC ODBC bridge. Den har et
    meget dårligt ry. Så måske ville det fungere bedre med en
    pure Java JDBC driver op mod en anden database server.
Avatar billede chrede Nybegynder
12. december 2002 - 22:03 #11
Ok, det var også meningen at vi skulle bruge Oracle (det er en skoleopgave) ... men dens odbc kørte ustabilt på skolen så det blev access i stedet...*snøft*
Avatar billede arne_v Ekspert
12. december 2002 - 22:05 #12
Du kan ikke få lov til at downloade en MySQL og bruge den ?
Avatar billede chrede Nybegynder
12. december 2002 - 22:06 #13
jo muligvis, hvis den ikke skal installeres på en server!
Avatar billede arne_v Ekspert
12. december 2002 - 22:10 #14
Du kan downloade den gratis og køre den på den samme
PC som kører din Java applikation.

Hmm. Den kræver nok også lidt memeory.

Men det var ihvertfald en ide.

www.mysql.com hvis du vil prøve.

Men hvis deadline for den opgave nærmer sig, så er det nok
ikke tiden at skifet database.

Men hvis der er god tid, eller næste opgave, eller bare
for sjov !
Avatar billede chrede Nybegynder
12. december 2002 - 22:12 #15
jeg vil kigge på det...

Men jeg skal lige høre, kan den også køre på en server.
Og kører den som oracle, eller er det bare en fil man pejer på som i access (gennem odbc)
Avatar billede arne_v Ekspert
12. december 2002 - 22:14 #16
Det er en rigtig database server, som er beregnet til at køre
på en anden maskine.

Fuldstændig ligesom Oracle.

(du kan også godt køre Oracle på din egen PC !)

Oracle koster en formue. MySQL er gratis.

Oracle kræver enorme mængder disk-plads og memory. MySQL er
mere beskeden.
Avatar billede chrede Nybegynder
12. december 2002 - 22:17 #17
ok, tak :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester