2016-07-25 15 views
0

Mit dem folgenden Code kann ich zum letzten Datensatz der Datenbank und zum ersten Datensatz der Datenbank wechseln. Ich erstelle die next() -Methode für den Wechsel zum nächsten Datensatz. Es bewegt sich von dem ersten Datensatz zu dem zweiten Datensatz, aber es einen dieses Fehlers (SQLException Ergebnisses zeigt nach dem letzten Zeile gesetzt. Ich nicht mit meinem Projekt fortgesetzt werden kann, bis ich Aufzeichnungen nächste und vorherigen bewegen kann. Jede Hilfe BitteJava Zum nächsten und vorherigen Datensatz wechseln

public void CreateResultSet(){ 
    try{ 
     stmt = connect.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE); 
     String sql = "select * from OAUTOPARTS_PRODUCT"; 
     stmt.executeQuery(sql); 
     rs = stmt.getResultSet(); 

    }catch(Exception e){ 

     JOptionPane.showMessageDialog(null, e); 
    } 

} 

public void first(){ 
    CreateResultSet(); 
    try{ 
      rs.first(); 
      String add1 = rs.getNString("PRODUCT_ID"); 
      txtPartNumber.setText(add1); 
      String add2 = rs.getNString("PRODUCT_NAME"); 
      txtPartName.setText(add2); 
      String add3 = rs.getNString("COST"); 
      txtPrice.setText(add3); 

    }catch(Exception e){ 
     JOptionPane.showMessageDialog(null, e); 
    } 

} 

public void next(){ 
    CreateResultSet(); 
    try{         
     while(rs.next()){ 
      rs.next(); 
      String add1 = rs.getNString("PRODUCT_ID"); 
      txtPartNumber.setText(add1); 
      String add2 = rs.getNString("PRODUCT_NAME"); 
      txtPartName.setText(add2); 
      String add3 = rs.getNString("COST"); 
      txtPrice.setText(add3); 
     } 
    }catch(Exception e){ 

     JOptionPane.showMessageDialog(null, e); 
    } 


} 

    public void last(){ 
    CreateResultSet(); 
    try{ 
     rs.last(); 
      String add1 = rs.getNString("PRODUCT_ID"); 
      txtPartNumber.setText(add1); 
      String add2 = rs.getNString("PRODUCT_NAME"); 
      txtPartName.setText(add2); 
      String add3 = rs.getNString("COST"); 
      txtPrice.setText(add3); 

    }catch(Exception e){ 
     JOptionPane.showMessageDialog(null, e); 
    } 

} 

/** 
* This method is called from within the constructor to initialize the form. 
* WARNING: Do NOT modify this code. The content of this method is always 
* regenerated by the Form Editor. 
*/ 
@SuppressWarnings("unchecked") 
// <editor-fold defaultstate="collapsed" desc="Generated Code">       
private void initComponents() { 

    txtPartNumber = new javax.swing.JTextField(); 
    txtPartName = new javax.swing.JTextField(); 
    txtPrice = new javax.swing.JTextField(); 
    btnFirst = new javax.swing.JButton(); 
    btnLast = new javax.swing.JButton(); 
    btnNext = new javax.swing.JButton(); 

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 

    btnFirst.setText("First"); 
    btnFirst.addActionListener(new java.awt.event.ActionListener() { 
     public void actionPerformed(java.awt.event.ActionEvent evt) { 
      btnFirstActionPerformed(evt); 
     } 
    }); 

    btnLast.setText("Last"); 
    btnLast.addActionListener(new java.awt.event.ActionListener() { 
     public void actionPerformed(java.awt.event.ActionEvent evt) { 
      btnLastActionPerformed(evt); 
     } 
    }); 

    btnNext.setText("Next"); 
    btnNext.addActionListener(new java.awt.event.ActionListener() { 
     public void actionPerformed(java.awt.event.ActionEvent evt) { 
      btnNextActionPerformed(evt); 
     } 
    }); 

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 
    getContentPane().setLayout(layout); 
    layout.setHorizontalGroup(
     layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(layout.createSequentialGroup() 
      .addGap(144, 144, 144) 
      .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) 
       .addComponent(btnFirst, javax.swing.GroupLayout.PREFERRED_SIZE, 139, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
        .addComponent(txtPartNumber, javax.swing.GroupLayout.PREFERRED_SIZE, 152, javax.swing.GroupLayout.PREFERRED_SIZE) 
        .addComponent(txtPartName, javax.swing.GroupLayout.PREFERRED_SIZE, 152, javax.swing.GroupLayout.PREFERRED_SIZE) 
        .addComponent(txtPrice, javax.swing.GroupLayout.PREFERRED_SIZE, 152, javax.swing.GroupLayout.PREFERRED_SIZE)) 
       .addComponent(btnNext, javax.swing.GroupLayout.PREFERRED_SIZE, 139, javax.swing.GroupLayout.PREFERRED_SIZE)) 
      .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) 
      .addComponent(btnLast, javax.swing.GroupLayout.PREFERRED_SIZE, 139, javax.swing.GroupLayout.PREFERRED_SIZE) 
      .addContainerGap(89, Short.MAX_VALUE)) 
    ); 
    layout.setVerticalGroup(
     layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(layout.createSequentialGroup() 
      .addGap(78, 78, 78) 
      .addComponent(txtPartNumber, javax.swing.GroupLayout.PREFERRED_SIZE, 53, javax.swing.GroupLayout.PREFERRED_SIZE) 
      .addGap(18, 18, 18) 
      .addComponent(txtPartName, javax.swing.GroupLayout.PREFERRED_SIZE, 53, javax.swing.GroupLayout.PREFERRED_SIZE) 
      .addGap(18, 18, 18) 
      .addComponent(txtPrice, javax.swing.GroupLayout.PREFERRED_SIZE, 53, javax.swing.GroupLayout.PREFERRED_SIZE) 
      .addGap(31, 31, 31) 
      .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 
       .addComponent(btnFirst, javax.swing.GroupLayout.PREFERRED_SIZE, 44, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addComponent(btnLast, javax.swing.GroupLayout.PREFERRED_SIZE, 44, javax.swing.GroupLayout.PREFERRED_SIZE)) 
      .addGap(31, 31, 31) 
      .addComponent(btnNext, javax.swing.GroupLayout.PREFERRED_SIZE, 44, javax.swing.GroupLayout.PREFERRED_SIZE) 
      .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) 
    ); 

    pack(); 
}// </editor-fold>       

private void btnLastActionPerformed(java.awt.event.ActionEvent evt) {           
    last(); 
}          

private void btnFirstActionPerformed(java.awt.event.ActionEvent evt) {           
    first(); 
}           

private void btnNextActionPerformed(java.awt.event.ActionEvent evt) {           
    next(); 
}    
+2

Vorsicht vor diesem Muster: 'while (rs.next()) {rs.next();/* ... * /} 'du rückst 2 Reihen vor. –

+0

Also Arthur was ist der richtige Code dafür? Ich bin neu dazu und konnte nicht weiter damit arbeiten, bis ich dieses Problem gelöst habe. Ich habe über das Internet gesucht und kann keine Lösung finden. Deshalb poste ich dieses Problem hier, um zu sehen, ob jemand helfen kann. –

+0

'while (rs.next())' und das war's. Entfernen Sie den zweiten Anruf. 'rs.next()' bringt den Cursor bereits in die nächste Zeile. –

Antwort

0

die Sie interessieren.

private void updateForm() { 
    String add1 = rs.getNString("PRODUCT_ID"); 
    txtPartNumber.setText(add1); 
    String add2 = rs.getNString("PRODUCT_NAME"); 
    txtPartName.setText(add2); 
    String add3 = rs.getNString("COST"); 
    txtPrice.setText(add3); 
} 

public void first() { 
    try { 
     if (rs.first()) { 
      updateForm(); 
     } 
    } catch (Exception e) { 
     JOptionPane.showMessageDialog(null, e); 
    } 
} 

public void next() { 
    try { 
     if (rs.next()) { 
      updateForm(); 
     } 
    } catch (Exception e) { 
     JOptionPane.showMessageDialog(null, e); 
    } 

} 

public void last() { 
    try { 
     if (rs.last()) { 
      updateForm(); 
     } 
    } catch (Exception e) { 
     JOptionPane.showMessageDialog(null, e); 
    } 

} 

Und CreateResultSet() im Konstruktor Ihrer Klasse bewegen, so nur einmal erstellt wird, das heißt

ich habe die Aktualisierung in einer privaten Methode herausgerechnet, die in aufgerufen wird Ihre first, next und last Methode.

Ich habe das: Hier sollte die CreateResultSet() gehen?

public MainForm() { 
    initComponents(); 
    connect = DbConnection.dbConnection(); 
    CreateResultSet(); 


} 

public void CreateResultSet(){ 
    try{ 

     stmt = connect.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE); 
     String sql = "select * from OAUTOPARTS_PRODUCT"; 
     stmt.executeQuery(sql); 
     rs = stmt.getResultSet(); 

    }catch(Exception e){ 

     JOptionPane.showMessageDialog(null, e); 
    } 

} 
+0

Danke für diesen Code. Wo genau verschiebe ich CreateResultSet()? in der InitComponets() –

+0

'initComponents()' wird von Netbeans generiert, also sollten Sie sich nicht damit anlegen. Stattdessen muss 'initComponents()' irgendwo aufgerufen werden, wahrscheinlich im Konstruktor Ihrer Klasse. Verschieben Sie 'CreateResultSet()' kurz vor oder kurz nach dem Aufruf von 'initComponents()'. –

+0

Danke Arthur mit deinem Vorschlag, ich könnte mein Problem jetzt lösen, ich kann mit meinem Projekt fortfahren. –

Verwandte Themen