ViktorMedlem sedan aug. 20021 752 inlägg Tänkte höra hur ni gör med databas hantering (kan inte hitta något bättre namn...) i Java. Vad jag menar är altså hur ni hämtar data, hur ni förvarar SQL satser osv.
Själv började jag med att ha en klass där det fanns funktioner för alla typer av databas hantering som jag skulle vilja ha, många olika select, update, delete av alla tabeller som hör till applikationen. Dessa funktioner retunerade ResultSet eller int beroende på vad det var för funktion. Denna klass anroppade jag från mina JSP sidor, servlets, beans osv och i dessa arbetade jag direkt mot ResultSet.
Efter att ha läst en bok om Java så började jag använda databas objekt, en klass som representerar en rad i en tabell. Det är mycket smidigt, häftigt och väldigt effektivt, kanske inte när programmet körs men när man tillvärkar det. Dessa objekt anroppar jag sedan från mina Jsp och servlets och använder set och get satser för att hämta och updatera data i databasen, mycket lätt. Efter att ha använt det nu i 1 år så börjar jag inse att det inte riktigt är så flexibelt som jag vill ha det, man kan inte på något lätt sätt kombinera flera tabeller utan att förstöra tanken bakom databas objekt.
Så nu kommer frågan, vad ska jag byta till? Jag tycker verkligen om att ha set och get satser för all data i en databas men samtidigt vill jag ha så mycket flexebilitet och så snabb behandling som möjligt. Vad använder du? :)
/Viktor
funktioner retunerade ResultSet
Jag hade en sådan klass, Database.java, men kunde inte returnera ResultSet eftersom man måste stänga sitt Statement sist och då försvinner ResultSetet. Istället fick jag ta hand om datat i ResultSetet direkt. Typ:
try {
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(strSQL);
if (rs.next()) {
foo = rs.getInt("foo");
bar = rs.getInt("bar");
}
} catch (Exception exc) {;}
finally {
close(stmt);
}
Hur gör man om man vill returnera ResultSetet?
ViktorMedlem sedan aug. 20021 752 inlägg Är du säker på att ResultSet inte finns kvar om du stänger ett statment? Ett ResultSet är ju bara ett resultat av ett statment och ska väll efter körning (ResultSet rs = stmt.executeQuery(strSQL);) inte ha någon kopling till statement.
Prova att skriva
public ResultSet getRS()
{
try {
Statement stmt = conn.createStatement();
return(stmt.executeQuery(strSQL));
} catch (Exception exc) {;}
finally {
close(stmt);
}
}
/Viktor
Jag vill minnas att det stod något i stil med ResultSet disconnected. Men jag skall prova.
leifenMedlem sedan juli 200173 inlägg Jag använder Vikors första variant. D v s en klass, eller egentligen en böna med application scope, som sköter hanteringen och returnerar Resultset. För min "lilla" applikation fungerar det bra.
Kör mot ett webbhotell där jag inte kan ha servlets. Dessutom är detta sidor för idrottsklubbens räkning. Är självlärd på Java och Jsp, i jobbet blir det nästan bara C++.
Fungerar inte. Får:
java.sql.SQLException: Closed Statement: next
Jag har läst ett antal inlägg här och var nu och kommit fram till att det inte går att returnera ett ResultSet om man stänger sitt Statement. Hur kan du ha fått det att fungera?
leifenMedlem sedan juli 200173 inlägg Oj då:
"A ResultSet object is automatically closed when the Statement object that generated it is closed, re-executed, or used to retrieve the next result from a sequence of multiple results."
min applikation fungerar alltså för att jag inte stänger mitt Statement och tar hand om ResultSetet direkt. Ibland kan det vara bra att läsa dokumentationen innan man kodar...