嘿伙计们我试图滚动数据库中的行。由于某种原因,我的上一个和下一个按钮不起作用。下一个按钮仅显示第一行,上一个按钮不显示任何内容。我的第一个和最后一个按钮正在工作
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());
}
}
答案 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
时递减。