Avatar billede rbl Praktikant
15. december 2001 - 02:32 Der er 3 kommentarer og
4 løsninger

rs.next() og rs.previous()

Jeg skal søge frem og tilbage i et ResultSet (rs), og rs.next() går også fint, men der er problemer med rs.previous().

Compileren klager ikke over metoden previous(), men når programmet kører, kommer der en exception der siger at metoden ResultSet.previous() slet ikke findes. Det virker lidt mærkeligt.
Avatar billede greybeard Nybegynder
15. december 2001 - 02:39 #1
Problemet er vel, at Resultset er et interface, der har metoden previous, men din SQL driver understøtter det ikke.
Det kan normalt ikke lade sig gøre i Java, men her er vi ovre i DB drivere, som nødvendigvis må bruge native metoder, og så er det ikke alle de almindelige regler der gælder.
Avatar billede rbl Praktikant
15. december 2001 - 02:43 #2
Hm.. jeg fik ellers at vide at min driver understøtter det.

Jeg har lige downloaded den fra
http://www.microsoft.com/sql/downloads/2000/jdbc.asp

Til MSSQL 2000
Avatar billede greybeard Nybegynder
15. december 2001 - 02:44 #3
static int TYPE_FORWARD_ONLY
          The constant indicating the type for a ResultSet object whose cursor may move only forward.

Prøv at teste denne konstant i dit resultset.

I øvrigt kan man heller ikke instantiere et Interface efter den almindelige syntaks, men det går fint med Resultset
Avatar billede erikjacobsen Ekspert
15. december 2001 - 07:49 #4
Du kal have lidt parametre med til CreateSttement for at kunne gå tilbage
Avatar billede martin_schou Nybegynder
15. december 2001 - 10:01 #5
Den standard ResultSet du får tilbage fra en
Statement.executeQuery(String sql);
er en implementering af ResultSet-interfacet, som (i de java-versioner, jeg har prøvet) ikke implementerer previous().

For at kunne bladre tilbage i dit ResultSet, skal du enten selv lave en implementation af ResultSet og flytte dataene deroveri, eller lave en helt anden datastruktur til dette.

Personligt har jeg selv lavet en anden datastruktur til database-brug, som du kan se her:
http://www.eksperten.dk/spm/114653
jeg har lavet et par ændringer siden, men du kan jo kigge på det, og se om det er noget, du kan/vil bruge til noget.
Avatar billede disky Nybegynder
16. december 2001 - 12:23 #6
det er der en nem løsning på.

Når du modtager dit resultset, løber du de igennem fra enda til anden, smider det i objekter som du gemmer i en arraylist.
Så lukker du database connection.

Så kan du nu løbe din arraylist igennem både frem og tilbage. Og du holder ikke på database forbindelsen længere end nødvendigt.
Avatar billede logical Nybegynder
17. december 2001 - 08:41 #7
Hvis du gerne vil kunne bladre frem og tilbage i et ResultSet som er JDBC 2.0 compliant (Som din driver er), skal du lave din createStatement således:
Statement stmt = con.createStatement(
                      ResultSet.TYPE_SCROLL_INSENSITIVE,
                      ResultSet.CONCUR_READ_ONLY);

Første argument angiver om det kun er forlæns, eller begge veje, hvis det understøttes.
Efter du har lavet din query kan du sige rs.getType(), og hvis den er > 1003 så vil du kunne kalde rs.previous().

Andet argument siger, at du bare vil læse. Alternativt er CONCUR_UPDATABLE, som så giver dig lov til at skrive i data.

Lad være med at bruge den her slags uhæmmet, da det koster lidt at bruge scrollable resultsets. Istedet hvis du kunne bruge data lidt, så læg dem over i en eller anden dynamisk datastruktur (Afhængig af antallet af rækker, selvfølgelig), men lidt ala:

List l = new ArrayList();
while(rs.next()) {
  l.add(new Kunde(rs.getString(\"NAVN\"), rs.getString(\"KID\")));
}
return l;
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