2017-04-15 4 views
0

私のデータベースの行をスクロールしようとしていますね。何らかの理由で、前のボタンと次のボタンが機能しません。次のボタンは最初の行だけを表示し、前のボタンは何も表示しません。私の最初と最後のボタンが機能しています。Java ResultSet next()とprevious()ボタンが機能しません

private void previousbtnActionPerformed(java.awt.event.ActionEvent evt) {            
    try 
    {    
     con = DriverManager.getConnection(CONN_STRING, USERNAME, PASSWORD);    
     Statement st = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); 
      ResultSet rs = st.executeQuery("SELECT * FROM EMPLOYEE"); 
       if (rs.previous()) 
       { 
        str1 = rs.getString("emp_id"); 
        emp_id.setText(str1); 
        str2 = rs.getString("emp_fname"); 
        first_name.setText(str2); 
        str3 = rs.getString("emp_lname"); 
        last_name.setText(str3); 
       } 
       else 
       { 
        rs.next(); 
       } 

     con.close(); 
    } 
    catch (SQLException err) 
    { 
     JOptionPane.showMessageDialog(EmployeeGUI.this, err.getMessage()); 
    }  
}           

private void nextbtnActionPerformed(java.awt.event.ActionEvent evt) {           
    try 
    {    
     con = DriverManager.getConnection(CONN_STRING, USERNAME, PASSWORD);    
     Statement st = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE); 
     ResultSet rs = st.executeQuery("select * from employee"); 

     if (rs.next()) 
     { 
      str1 = rs.getString("emp_id"); 
      emp_id.setText(str1); 
      str2 = rs.getString("emp_fname"); 
      first_name.setText(str2); 
      str3 = rs.getString("emp_lname"); 
      last_name.setText(str3); 
     } 
     else 
     { 
      rs.previous(); 
     }    
    }   
    catch (SQLException err) 
    { 
     JOptionPane.showMessageDialog(EmployeeGUI.this, err.getMessage()); 
    }   

}    

答えて

1

Here'sResultSetのJavadoc、これは、それが言うことである:

ResultSetオブジェクトが データの現在の行を指し示すカーソルを維持します。最初は、カーソルは最初の行の前に配置されます。 次のメソッドはカーソルを次の行に移動し、ResultSetオブジェクトにそれ以上行がない場合は falseを戻すため、結果セットを反復処理するwhileループでは を使用できます。

あなたがResultSetオブジェクトを取得するときに、それは常に、前の行の前に配置され、したがって、previous()は常にfalseを返します。あなたはこれらのボタンでページネーションを実装しようとしていると仮定すると、

、私は例えば、MySQLのSELECT documentationを見たお勧めしますし、行を取得するためにlimitを使用します。

SELECT * FROM tbl LIMIT 5,10; # Retrieve rows 6-15 

あなたはLIMIT i, 1どこiでそれを使用することができますそれぞれのクリックで増やされ、previousをクリックするたびに減少します(next)。

+0

いいえ私はページネーションを実装しようとしていません。それは単なる行の束を持つデータベーステーブルです。最初のボタンはテーブルの最初の行を表示し、最後のボタンは最後の行を表示します。次のボタンと前のボタンは、行間を前後にジャンプします。 –

+1

これはまさにページネーションです: –

+0

私はあなたが話していることを理解しているとは思わない。基本的には、変更する必要があるのは実際のプログラムではなく、SQLコードだけです。 –

関連する問題