Cursor bei JDBC Treiber

Alle Fragen und Probleme zu den externen Schnittstellen wie ODBC, JDBC, ...

Cursor bei JDBC Treiber

Beitragvon nieselfriem » So 8. Nov 2009, 11: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
nieselfriem
Neuer Benutzer
 
Beiträge: 3
Registriert: Do 22. Okt 2009, 01:45

Beitragvon castorp » So 8. Nov 2009, 14: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
castorp
Erfahrener Benutzer
 
Beiträge: 676
Registriert: Sa 27. Jun 2009, 22:24

Beitragvon nieselfriem » So 8. Nov 2009, 15:03

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

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


Zurück zu externe Schnittstellen

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste