2014-08-30 57 views
-1

我的代码在下面不工作,只是保持指针在第一个记录,当我试图用一段时间替换if语句或循环它只是循环到我的数据表上的最后一个记录,当我点击按钮执行该行动JDBC导航与resultSet.next()的问题;

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记录先后(不同时)。

+0

''rs.previous从其他()删除。删除其他自己,你不需要它。 – 2014-08-30 08:09:47

+0

不应该是'ResultSet rs = stmt.executeQuery(SQL);'而不是ResultSet = stmt.executeQuery(SQL);''和'String'而不是'string'和'try'而不是'Try'并且''系统'而不是'系统'和'字符串uPass =“admin”'后面的分号“?? – Nivedita 2014-08-30 08:23:04

回答

0

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

if语句替换为whilefor循环将导致游标遍历整个结果集。但是,当前循环的每次迭代都会使用“当前”记录的值覆盖txtFnametxtLname的值。为了捕获第2,3,4条记录的值等,您需要在每次迭代中创建一个新的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循环结束,这两个列表将包含所有记录。

0

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部分执行光标移动到上一行到此ResultSet。然后,当对前一个方法的调用返回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的注释,整理错误