代码工作,但数据未从数据库中读取

时间:2014-04-21 02:23:35

标签: mysql jdbc

我正在尝试编辑数据库中的某些数据。在我的代码中,这是在按下按钮时完成的。该代码如下:

  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相同。

运行代码时不会显示异常。我的问题在这里是什么?如何成功读取值?

1 个答案:

答案 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