25. marts 2018 - 15:53Der er
8 kommentarer og 1 løsning
Genbrug SQL-result mellem classes
Hej Jeg gennemgår det samme datasæt igen og igen, med ved forskellige parametre. Lige nu udtrækker jeg det samme datasæt fra MySQL, hvilket jo ikke er smart da det er det samme datasæt hver gang.
Lige nu, i FIL1 forberede jeg parametrene og kalder funktionen i FIL2 til at lave analysearbejdet. Men jeg vil istedet gerne lave SQL udtrækket i FIL1 og så skal funktionen i FIL2 have adgang til det udtræk.
Jeg har forsøgt mig med at lave nogle tests med at lave Public Static variabler, men kan ikke få funktionen i FIL2 til at læse dem.
Jeg har her under skitseret hvordan strukturen i filerne ser ud.
Håber nogen kan fortæller hvordan man knækker den nød :)
FIL1 public class analyse { public static void main(String[] args) throws ExecutionException, InterruptedException, IOException, ParseException { while (en masse loops){ String test_kombo_result = kombinere.func2(argumenter her); } }}
FIL2 public class kombinere { public static String func2(argumenter){ String query = "SELECT * FROM ....."; "Behandler resultat efterfølgende"
Jeg fik nu ideen til at flytte public static String func2(argumenter){} ind i FIL1, så virker min simple test.
Meeeen det betyder selvfølgelig også at min FIL1 begynder at blive pæn lang, så jeg vil stadig foretrække at knække koden på at dele en variable mellem classes :)
Jeg havde for længere tid siden også overvejet at sende det med over som argument, men var i tvivl om det "kostede" noget i ressourcer, frem for at lave en public variable som FIL2 kunne læse "direkte". Jeg havde helt glemt den mulighed.
Jeg vil tro jeg har nok RAM, så det må komme an på en prøve :)
Det koster ikke rigtihgt noget at sende over som argument. Det er jo en reference til List<Noget> der bliver sendt over ikke hele objektet, saa 4 eller 8 bytes.
Nu når jeg sidder og leger med at få Listen med over som argument (som virker fint) tænker jeg om det giver nogen forskel at istedet lave referencen til sql resultatet. Jeg har test det og det virker også fint. Det vil gøre det en del nemmere i min kode, hvis ikke det giver nogen ressource mæssig forskel.
Ved du om det gør en forskel, jeg tænker performance eller ressource mæssig forskel?
func2 bliver kaldt mange gange, men der behøver kun at blive hentet data fra sql én gang. Lad mig præcisere FIL1. Er det så ikke stadig kun referencen til "rs" som sendes med over? I FIL2 starter jeg så med "rs.beforeFirst();" for at starte datasættet forfra.
vil give dig en exception ved kald af rs.beforeFirst().
st = conn.createStatement(TYPE_SCROLL_SENSITIVE);
vil resultere i at data bliver laest igen fra databasen.
st = conn.createStatement(TYPE_SCROLL_SENSITIVE);
vil enten give dig det du oensker eller resultere i en exception fordi din JDBC driver ikke understoetter det.
Jeg vil betragte at laese ind i en List<Noget> som det mere sikre valg.
Synes godt om
Ny brugerNybegynder
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.