Java 使用resultSet.next()进行JDBC导航时出现问题;
下面的代码不起作用,只需将光标一直指向第一条记录,当我尝试用while或for循环替换if语句时,当我单击执行该操作的按钮时,它只会循环到数据表上的最后一条记录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
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的评论并整理错误removers.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());
}