Cursor bei JDBC Treiber

Alle Fragen und Probleme zu den externen Schnittstellen wie ODBC, JDBC, ...
Antworten
nieselfriem
Neuer Benutzer
Beiträge: 3
Registriert: Do 22. Okt 2009, 01:45

Cursor bei JDBC Treiber

Beitrag von nieselfriem » So 8. Nov 2009, 10:12

Hallo hat der JDBC Treiber nur den next Cursor oder auch first, prev und last Cursor. Denn ich habe in java ein kleine Programm gechrieben und da funktioniert nur next

Code: Alles auswählen

import java.sql.*;
import java.awt.*;
import java.awt.event.*;

public class VorZurueck extends Frame {
   Panel knoepfe = new Panel(new GridLayout(1,4));
   Button erst = new Button("Erste Zeile"),
          prev = new Button("Voherige Zeile"),
          next = new Button("Nächste Zeile"),
          last = new Button("Letzte Zeile");
   TextField aus = new TextField();
   Connection c; Statement s; ResultSet r;
   
   public VorZurueck() {
      setLayout(new BorderLayout());
      add(knoepfe, "North");
      knoepfe.add(erst); knoepfe.add(prev); knoepfe.add(next); knoepfe.add(last);
      add(aus,"Center");
      setSize(400, 250);
      setVisible(true);
      erst.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
         erster();
      }});
      
      prev.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
         vorheriger();
      }});
      
      next.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
         naechster();
      }});
      
      last.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
         letzter();
      }});
      
      addWindowListener(new WindowAdapter() {
         public void windowClosing(WindowEvent e) {
            System.exit(0);   
         }
      });
      
      try {
         Class.forName("org.postgresql.Driver");
         // c = DriverManager.getConnection("jdbc :p ostgresql://localhost","postgres", "werner80");
          c = DriverManager.getConnection( "jdbc :p ostgresql://localhost/jahb", "postgres", "werner80" );
          s = c.createStatement();
          r=s.executeQuery("SELECT * FROM jahb."alle berufe"");
          erster();
      }
      catch (Exception ex) { ex.printStackTrace();}
   }
      void erster() {
         try {
            r.first(); zeige();
         }
         catch (Exception ex) {}
      }
      
      void vorheriger() {
         try {
            r.previous(); zeige();
         }
         catch (Exception ex) {}
      }
      
      void naechster() {
         try {
            r.next(); zeige();
         }
         catch (Exception ex) {}
      }
      
      void letzter() {
         try {
            r.last(); zeige();
         }
         catch (Exception ex) {}
      }
      
      void zeige() throws Exception {
         aus.setText(r.getString("Berufsbez"));
      }
      
      public static void main(String[] argv) {
           new VorZurueck();
   
      }
   
}


gruß niesel

castorp
Erfahrener Benutzer
Beiträge: 1130
Registriert: Sa 27. Jun 2009, 22:24
Wohnort: Bayern

Beitrag von castorp » So 8. Nov 2009, 13:45

Um einen Cursor zu erhalten bei dem prev() und next() funktioniert, muss man das beim createStatement() entsprechend mit angeben (siehe Connection.createStatement(int, int) )
Der default ist TYPE_FORWARD_ONLY.

Mit

Code: Alles auswählen

stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
sollte das mit previous(), last() usw dann funktionieren.

Denk aber daran, dass der Postgres Treiber dann das gesamte ResultSet im Speicher hält.
Bei großen Tabellen vermutlich keine gute Idee

nieselfriem
Neuer Benutzer
Beiträge: 3
Registriert: Do 22. Okt 2009, 01:45

Beitrag von nieselfriem » So 8. Nov 2009, 14:03

Danke, auch für den Hinweis. Ist nur zum Test und zu wissen was möglich ist.

gruß

Antworten