2017-04-15 66 views
0

嘿傢伙我試圖滾動我的數據庫中的行。出於某種原因,我的上一個和下一個按鈕不起作用。下一個按鈕僅顯示第一行,而上一個按鈕不顯示任何內容。我第一個和最後一個按鈕正在工作。Java結果集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's的Javadoc ResultSet,這是它說:

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使用將隨着每次點擊next而遞增,並且每次點擊previous時遞減。

+0

不,我不是要實施分頁。這只是一個包含一堆行的數據庫表。第一個按鈕將顯示錶格的第一行,最後一個按鈕將顯示最後一行。下一個和上一個按鈕將在各行之間前後跳轉。 –

+1

這正是分頁:) –

+0

我不認爲我明白你在說什麼。基本上你說的唯一需要改變的是sql代碼,而不是實際的程序? –

相關問題