有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在使用resultSet进行JDBC导航时出现问题。next();

下面的代码不起作用,只需将光标一直指向第一条记录,当我尝试用while或for循环替换if语句时,当我单击执行该操作的按钮时,它只会循环到数据表上的最后一条记录

Try {
    string host="jdbc:derby://localhost:1527/Employees";
    string uName="admin1";
    string uPass="admin"
    string SQL="SELECT * FROM Workers";

    Connection con= DriverManager.getConnection(host, uName, uPass);
    Statement stmt=Con.createStatement();
    ResultSet=stmt.executeQuery(SQL);
    if (rs.next()) 
    {    
        string fname=rs.getString(first_name);
        string lname=rs.getString(last_name):    
        txtFname.setText(fname);    
        txtLname.setText(lname);
    }
    else{
        rs.previous(); 
       //throw some sql error here}
    }
    catch(SQLException err) {
         system.out.println(err.getMessage);
    }

我如何绕过这个问题,连续地(不是同时地)获得第二、第三、第四到第n条记录


共 (2) 个答案

  1. # 1 楼答案

    javadoc说-

    ResultSet#previous() -Moves the cursor to the previous row in this ResultSet 
    object.When a call to the previous method returns false, the cursor is positioned
    before the first row. Any invocation of a ResultSet method which requires a 
    current row will result in a SQLException being thrown.
    

    因此,在某个时间点,if(rs.next())返回false,然后执行else部分,光标移动到此结果集中的前一行。然后,当对前一个方法的调用返回false时,光标位于第一行之前。然后它将抛出异常

    这样做

    if (!resultSet.next() ) {
        System.out.println("resultset does not data");
    } else {
    
        do {
         string fname=rs.getString(first_name);
         string lname=rs.getString(last_name):    
         txtFname.setText(fname);    
         txtLname.setText(lname);
        } while (resultSet.next());
    }
    

    还有一件事,检查Nivedita的评论并整理错误

  2. # 2 楼答案

    查看ResultSet.next(){a1},调用rs.next()一次作为if条件只会将光标从其起始位置向前移动一个位置。因此,您只能看到第一条记录

    whilefor循环替换if语句将导致光标在整个结果集中迭代。然而,当前循环的每次迭代都会用“当前”记录的值覆盖txtFnametxtLname的值。为了获取第二、第三、第四条记录等的价值。。。您需要在每次迭代中创建一个新的TextComponent对象。比如说,

    // use some lists to capture intermediate records (for illustration only)
    List<JTextComponent> allFnames = new ArrayList<JTextComponent>();
    List<JTextComponent> allLnames = new ArrayList<JTextComponent>();
    while(rs.next()) {
        string fname=rs.getString(first_name);
        string lname=rs.getString(last_name):
    
        JTextComponent txtFname = new JTextComponent(); // new object
        txtFname.setText(fname);
        allFnames.add(txtFname);
    
        JTextComponent txtLname = new JTextComponent(); // new object
        txtLname.setText(lname);
        allLnames.add(txtFname);
    }
    

    现在在while循环的末尾,这两个列表将包含您的所有记录