Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用resultSet.next()进行JDBC导航时出现问题;_Java - Fatal编程技术网

Java 使用resultSet.next()进行JDBC导航时出现问题;

Java 使用resultSet.next()进行JDBC导航时出现问题;,java,Java,下面的代码不起作用,只需将光标一直指向第一条记录,当我尝试用while或for循环替换if语句时,当我单击执行该操作的按钮时,它只会循环到数据表上的最后一条记录 Try { string host="jdbc:derby://localhost:1527/Employees"; string uName="admin1"; string uPass="admin" string SQL="SELECT * FROM Workers"; Connectio

下面的代码不起作用,只需将光标一直指向第一条记录,当我尝试用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条记录(不是同时进行)。

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

if
语句替换为
while
for
循环将导致光标在整个结果集中迭代。然而,当前循环的每次迭代都会用“当前”记录的值覆盖
txtFname
txtLname
的值。为了获取第二、第三、第四条记录等的价值。。。您需要在每次迭代中创建一个新的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);
}
//使用一些列表来捕获中间记录(仅用于说明)
List allFnames=new ArrayList();
List allLnames=new ArrayList();
while(rs.next()){
string fname=rs.getString(名字);
string lname=rs.getString(姓氏):
JTextComponent txtFname=新的JTextComponent();//新对象
txtFname.setText(fname);
allFnames.add(txtFname);
JTextComponent txtLname=新JTextComponent();//新对象
txtLname.setText(lname);
allLnames.add(txtFname);
}
现在在
while
循环的末尾,这两个列表将包含您的所有记录。

表示-

因此,在某个时间点,
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的评论并整理错误

remove
rs.previous()
。删除else本身您不需要它。它不应该是
ResultSet rs=stmt.executeQuery(SQL)而不是
ResultSet=stmt.executeQuery(SQL)
String
而不是
String
try
而不是
try
System
而不是
System
以及
String uPass=“admin”
后面的分号??
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());
}