我的下面的代码不起作用,只是将光标指向第一条记录,当我尝试用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个记录先后(不是同时)。
答案 0 :(得分:0)
查看ResultSet.next()
doc,将rs.next()
作为if
条件调用一次只会将光标从其起始位置向前移动一个位置。因此,您只能看到第一条记录。
用if
或while
循环替换for
语句将导致光标迭代整个结果集。但是,当前循环的每次迭代都会覆盖txtFname
和txtLname
的值与“当前”记录的值。为了捕获第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
循环结束时,这两个列表将包含您的所有记录。
答案 1 :(得分: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的评论并理清错误