我正在尝试编辑数据库中的某些数据。在我的代码中,这是在按下按钮时完成的。该代码如下:
b1.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent e) {
try {
preparedStatement = connect
.prepareStatement("select * from student where clsnum='" + t1.getText() + "'");
rs = preparedStatement.executeQuery();
if(rs.next()) {
setCenter(edit(rs));
setBottom(addHBox());
}
else {
msg1.setText("Student Not Found...!");
}
} catch (SQLException ex) {
Logger.getLogger(EditStudent.class.getName()).log(Level.SEVERE, null, ex);
}
}
});
在其中,首先我搜索数据库中是否存在特定细节(使用通过TextField-t1输入的值)。如果没有找到“找不到学生......!”消息显示。否则'if'部分有效。代码在这里运行正常。
现在我将发布在'if'部分内工作的代码。
private VBox edit(ResultSet rs) throws SQLException {
VBox vb2 = new VBox();
vb2.setPadding(new Insets(30, 20, 25, 130));
vb2.setSpacing(30);
String name = null, reg = null;
while (rs.next()) {
name = rs.getString("name");
cnum = rs.getString("clsnum"); // cnum is declared at the starting of class.
reg = rs.getString("regnum");
}
HBox hb1 = new HBox();
hb1.setSpacing(10);
Label lb2 = new Label("Class Number = " + cnum + "");
lb2.setFont(Font.font("Calibri", FontWeight.BOLD, 18));
hb1.getChildren().addAll(lb2);
VBox hb2 = new VBox();
hb2.setSpacing(10);
Label lb3 = new Label("Name (Current Name = " + name + " )");
lb3.setFont(Font.font("Calibri", 16));
tf1 = new TextField();
tf1.setMaxWidth(150);
hb2.getChildren().addAll(lb3, tf1);
VBox hb4 = new VBox();
hb4.setSpacing(10);
Label lb5 = new Label("Register Number (Current Number = " + reg + " )");
lb5.setFont(Font.font("Calibri", 16));
tf3 = new TextField();
tf3.setMaxWidth(150);
hb4.getChildren().addAll(lb5, tf3);
msg = new Text();
msg.setFont(Font.font("Calibri", FontWeight.THIN, 18));
msg.setFill(Color.RED);
vb2.getChildren().addAll(hb1, hb2, hb4, msg);
return vb2;
}
此部分代码存在问题。我在这里从数据库中读取了3个值 - 'name','cnum'和'reg'。当我在Label中显示这些值时,它们显示“null”,而不是实际值(例如,Label lb3包含“Name(Current Name = null)”)。标签lb4与lb3相同。
运行代码时不会显示异常。我的问题在这里是什么?如何成功读取值?
答案 0 :(得分:2)
摆脱while循环,您已经将光标移动到所需的行。再次调用它将移动到下一行,我假设您只获取了1个结果。这就是为什么while循环永远不会被执行,没有next()。
while (rs.next()) {//delete
name = rs.getString("name");
cnum = rs.getString("clsnum"); // cnum is declared at the starting of class.
reg = rs.getString("regnum");
}//delete