【问题标题】:Populating a tableview with specific rows from the db使用数据库中的特定行填充表视图
【发布时间】:2018-11-28 01:08:37
【问题描述】:

我正在尝试显示所有具有特定 CNP 的约会,该 CNP 是用户用来进行的。

要求用户重新输入他在创建约会时使用的同一 CNP,以便查看使用该特定 CNP 进行的约会。

我想在查询中做什么,而不是“?”添加 CNP 的值,即存储在 String cnp 中

P.S 我在代码中添加了注释以帮助大家理解。

代码:

package LicentaApp;



public class ProgramariDBController implements Initializable {

@FXML
private TextField cpn; // The user is asked to reenter the same CNP that he did use when he created the appointment
@FXML
private TableView<DetaliiProgramari> ProgrDB;
@FXML
private TableColumn<DetaliiProgramari, String> Nume;
@FXML
private TableColumn<DetaliiProgramari, String> Prenume;
@FXML
private TableColumn<DetaliiProgramari, String> Data;
@FXML
private TableColumn<DetaliiProgramari, String> Ora;
@FXML
private TableColumn<DetaliiProgramari, String> Departament;
@FXML
private TableColumn<DetaliiProgramari, String> Doctor;
@FXML
private TableColumn<DetaliiProgramari, String> Nr_telefon;

public LogareController Numeutilzator = new LogareController();
private ObservableList<DetaliiProgramari> Info;


@Override
public void initialize(URL url, ResourceBundle ResurcesFORDAYS) {
    // TODO

}



@FXML
private void AfiseazaProgramari(ActionEvent event) {
    try {
      ConectaredB ConectaredB=new ConectaredB();
        Connection conectare=ConectaredB.logareDB();

        Info = FXCollections.observableArrayList();
        String CNP=cpn.getText(); // I though making it a string will help, guess it didn't
        ResultSet IncDate = conectare.createStatement().executeQuery("SELECT *  FROM programari where CNP=?"); // What I want to do, instead of the "?" to add the value of the CNP, that is stored in String cnp
        while (IncDate.next()) {

            Info.add(new DetaliiProgramari(IncDate.getString(2), IncDate.getString(3), IncDate.getString(4), IncDate.getString(5), IncDate.getString(6), IncDate.getString(7), IncDate.getString(8)));
        }

    } catch (SQLException ex) {
        System.err.println("Error"+ex);
    }


    Nume.setCellValueFactory(new PropertyValueFactory<>("Nume"));
    Prenume.setCellValueFactory(new PropertyValueFactory<>("Prenume"));
    Data.setCellValueFactory(new PropertyValueFactory<>("Data"));
    Ora.setCellValueFactory(new PropertyValueFactory<>("Ora"));
    Departament.setCellValueFactory(new PropertyValueFactory<>("Departament"));
    Doctor.setCellValueFactory(new PropertyValueFactory<>("Doctor"));
    Nr_telefon.setCellValueFactory(new PropertyValueFactory<>("Nr_telefon"));

    ProgrDB.setItems(null);
    ProgrDB.setItems(Info);

}
}

谢谢!

删除问题的未来链接

【问题讨论】:

  • 当您将可以在修订历史记录中看到的问题部分作为新问题发布时,请确保您能够看到异常(e.printStackTrace() 或类似的内容块)并在问题中包含完整的堆栈跟踪。

标签: java mysql sql javafx


【解决方案1】:

您可以简单地连接字符串。

ResultSet IncDate = conectare.createStatement().executeQuery(
    "SELECT *  FROM programari where CNP=" + cnp);

或者,使用准备好的语句。

String sql = "SELECT *  FROM programari where CNP=?";
PreparedStatement ps = connection.prepareStatement(sql);
ps.setString(1, cnp);
ResultSet result = ps.executeQuery();

编辑

在使用任何一种方法时,您都需要注意列的数据类型。如果CNP 是字符串(varchar)列,则应包含引号。

"SELECT *  FROM programari where CNP='" + cnp + "'"

另外,如果你使用第二种方法,你可以根据实际类型使用不同的set...()方法。

【讨论】:

  • 这正是我想要的,谢谢 Jai!非常感谢您的帮助。
  • 你确定这在没有引号和正确转义引号的情况下有效(第一种方法)???手册没有说明这一点:dev.mysql.com/doc/refman/8.0/en/string-literals.html
  • @fabian 我的错,除非CNP 是整数,否则它可能不起作用。通过set..() 使用准备好的语句的第二种方法肯定更健壮。
  • 嘿,我看到你们还在这里,我在删除约会时遇到了一些问题,我已经在帖子底部进行了描述,我也会编辑标题。
  • @MGAMG 你应该把它作为一个新问题发布。
猜你喜欢
  • 1970-01-01
  • 2013-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多