Java ResultSet方法previous()不起作用
我不知道为什么,但是Java ResultSet方法previous()不起作用,java,jdbc,Java,Jdbc,我不知道为什么,但是previous()方法不起作用,每当用户按下next按钮时,输出保持不变,不会向前移动。有人能帮忙吗?每次调用actionPerformed方法时(我假设在按下某个按钮时调用该方法),您都会再次执行查询。因此next()将始终为您提供第一个元素,而previous将返回false 您可能应该将所有行读入一些数据结构,例如ArrayList(作为初始化步骤,而不是在单击按钮时),并维护该列表的当前索引,这将允许您在单击按钮时向前或向后移动 另外,在未检查返回值的情况下,不应使
previous()
方法不起作用,每当用户按下next
按钮时,输出保持不变,不会向前移动。有人能帮忙吗?每次调用actionPerformed
方法时(我假设在按下某个按钮时调用该方法),您都会再次执行查询。因此next()
将始终为您提供第一个元素,而previous
将返回false
您可能应该将所有行读入一些数据结构,例如ArrayList
(作为初始化步骤,而不是在单击按钮时),并维护该列表的当前索引,这将允许您在单击按钮时向前或向后移动
另外,在未检查返回值的情况下,不应使用rs.next()
或rs.previous()
。如果这些方法返回false
,则不应调用rs.getInt(“id”)
等方法,因为它们将引发异常
p.p.S一些JDBC驱动程序不支持previous()
,first
和last
方法,这意味着它们可能抛出SQLFeatureNotSupportedException
。但是,如果您按照我的建议读取初始化步骤中的所有数据,则只需要next()
。每次按下按钮时,您都会创建一个新语句。谢谢您的指导:):)。我现在使用的是absolute()函数,并将行号存储在静态变量中,它起了作用。并且不支持yess previous()函数。谢谢你
public void actionPerformed(ActionEvent E)
{
int id;
String name,address,phone;
Connection conn = null;
PreparedStatement stmt = null;
try {
//STEP 2: Register JDBC driver
Class.forName("com.mysql.jdbc.Driver");
//STEP 3: Open a connection
System.out.println("Connecting to database...");
conn = DriverManager.getConnection(DB_URL,USER,PASS);
//STEP 4: Execute a query
String sql;
sql = "SELECT * FROM person";
System.out.println("Creating statement...");
stmt = conn.prepareStatement (sql,ResultSet.TYPE_SCROLL_INSENSITIVE ,
ResultSet.CONCUR_UPDATABLE );
ResultSet rs = stmt.executeQuery(sql);
if(E.getSource()== bNext) {
rs.next();
id = rs.getInt("id");
name = rs.getString("name");
address = rs.getString("address");
phone = rs.getString("phone");
//Display values
System.out.print("ID: " + id);
System.out.print(", Name: " + name);
System.out.print(", Address: " + address);
System.out.println(", Phone: " + phone);
}
if(E.getSource()== bPrevious) {
rs.previous();
id = rs.getInt("id");
name = rs.getString("name");
address = rs.getString("address");
phone = rs.getString("phone");
//Display values
System.out.print("ID: " + id);
System.out.print(", Name: " + name);
System.out.print(", Address: " + address);
System.out.println(", Phone: " + phone);
}
if(E.getSource()==bLast) {
rs.last();
id = rs.getInt("id");
name = rs.getString("name");
address = rs.getString("address");
phone = rs.getString("phone");
//Display values
System.out.print("ID: " + id);
System.out.print(", Name: " + name);
System.out.print(", Address: " + address);
System.out.println(", Phone: " + phone);
}
if(E.getSource()==bFirst) {
rs.first();
id = rs.getInt("id");
name = rs.getString("name");
address = rs.getString("address");
phone = rs.getString("phone");
//Display values
System.out.print("ID: " + id);
System.out.print(", Name: " + name);
System.out.print(", Address: " + address);
System.out.println(", Phone: " + phone);
}
//STEP 6: Clean-up environment
rs.close();
stmt.close();
conn.close();
}