Java ResultSet next()和previous()按钮不起作用

时间:2017-04-15 00:02:12

标签: java

嘿伙计们我试图滚动数据库中的行。由于某种原因,我的上一个和下一个按钮不起作用。下一个按钮仅显示第一行,上一个按钮不显示任何内容。我的第一个和最后一个按钮正在工作

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 个答案:

答案 0 :(得分:1)

Here's ResultSet的javadoc就是这样说的:

  

ResultSet对象维护一个指向其当前行的光标   数据。最初,光标位于第一行之前。该   next方法将光标移动到下一行,因为它返回   当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时递减。