首页 > 解决方案 > 使用来自特定用户的数据库中的数据填充表视图

问题描述

更新:有关我取得的进展以及我在 rn 中遇到的困难的更多信息,以斜体字写在帖子的末尾

我试图在表格视图中显示当前登录用户所做的所有约会。我试图通过使用该人用来登录的用户名来创建条件,因为用户名在数据库中是唯一的。

PS。我写了关于我通过代码尝试的细节。

保存约会的第一个表如下所示:

这是“Programaritest”表

ID_programare | Nume | Prenume | Data | Ora | Departament | Doctor | Nr_telefon

这是用户名保存为唯一的帐户表

ID_account | Username | Password | Email | Nume |  Prenume | Admin 

在这个我用数据库中的东西填充表视图。

我所说的用户名在另一个类中定义为TextField,我将在下面发布

package LicentaApp;

public class ProgramariDBController implements Initializable {


@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(); This is how I thought of taking the username which is found in LogareController, when somebody is tipying it in to login into the app.

private ObservableList<DetaliiProgramari> Info;

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

}

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

        Info = FXCollections.observableArrayList();

        ResultSet IncDate = conectare.createStatement().executeQuery("SELECT *  FROM programaritest WHERE Username IN (SELECT Username FROM accounts where Username='"+Numeutilzator.getText()+" ')"); This is how I thought of making the query.
        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);
    }
}

所以这是找到我要使用的用户名的类:

 package LicentaApp;

 public class LogareController implements Initializable {
 public LoginVerifier loginVerifier = new LoginVerifier();

   @FXML
   private TextField Numeutilzator; **This is the one, "NumeUtilizator" is the username 

   @FXML
   private PasswordField Parola;

   @FXML
   private Label Stare;
 @Override
 public void initialize(URL location, ResourceBundle resources) {

  if (loginVerifier.Conexiune()) {
      Stare.setText("");
  } else {
      Stare.setText("Conexiune nereusita!");
  }
 }

 public void Autentificare (ActionEvent event) {
 try {
     if(loginVerifier.testaredate(Numeutilzator.getText(),                 Parola.getText())) {
         Stare.setText("Autentificare reusita !");
         ((Node)event.getSource()).getScene().getWindow().hide();
            Stage StagePrincipala= new Stage();
            FXMLLoader incarcator= new FXMLLoader();
            Pane parinte =     incarcator.load(getClass().getResource("/LicentaApp/Meniu.fxml").openStream());

            Scene scene = new Scene(parinte);
            scene.getStylesheets().add(getClass().getResource("Style1212.css").toExternalForm());
            StagePrincipala.setScene(scene);
            StagePrincipala.show();

          }
     else { 
         Stare.setText("Nume de utilizator sau parola incorect");

     }
} catch (SQLException e) {
     e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
    }
 }
     @FXML
    public void Inregistrare(ActionEvent event) {
        try {
             ((Node)event.getSource()).getScene().getWindow().hide();
            Stage PS= new Stage();
            FXMLLoader incarcator= new FXMLLoader();
            Pane parinte =     incarcator.load(getClass().getResource("/LicentaApp/InregistrareUser.fxml").open    Stream());
            Scene scena = new Scene(parinte);
            scena.getStylesheets().add(getClass().getResource("Style1212.css").toExternalForm());
            PS.setScene(scena);
            PS.show();
    } catch (Exception e) {

    }

public String getText() {
    TextField Numeutilizator = new TextField();
    Numeutilizator.getText();
    return null;
}

    }

}

我得到的错误是:

类型 LogareController 的方法 getText() 未定义

为什么是这样?

PS。基本上我想显示当前登录用户所做的所有约会。

这是我尝试过的:

public String getText() {
    TextField Numeutilizator = new TextField();
    Numeutilizator.getText();
    return null;
}

似乎已经修复了它,但我不知道它是否应该是这样,你觉得呢?

将用户名添加到 apointment

基本上,如果其他人看到这个,我试图从 LogareController(用户名用于登录)中获取用户名(Numeutilizator),以便在进行指定时在 AddProgramareController 中使用,用户名将被插入到表中所以我可以用它在表格视图中显示该用户所做的所有安排

我现在遇到的错误:

java.sql.SQLIntegrityConstraintViolationException:列“Numeutilizator”不能为空

问题是我尝试从 Numeutilizator 移动信息不成功,或者我试图将该信息提供给查询(语句)的方式不完全存在..

package LicentaApp;




public class AddProgramareController implements Initializable {
ObservableList Timestamp=FXCollections.observableArrayList();




@FXML
private TextField Nume;

@FXML
private TextField Prenume;

@FXML
private TextField Ora;

@FXML
private DatePicker Data;

@FXML
private TextField Departament;

@FXML
private TextField Doctor;

@FXML
private TextField Nr_telefon;













@FXML
LogareController Numeutilizator=new LogareController();

public void initialize(URL location, ResourceBundle resources) {

} 
@FXML 
private void AddProgramare(ActionEvent event) throws SQLException, IOException  {


    String Interogare1= "INSERT INTO programaritest(Nume,Prenume,Data,Ora,Departament,Doctor,Nr_telefon,Numeutilizator) VALUES(?,?,?,?,?,?,?,?)";

    String nume=Nume.getText();
    String prenume=Prenume.getText();

    LocalDate data=Data.getValue(); 

    String ora=Ora.getText();
    String departament=Departament.getText();
    String doctor=Doctor.getText();
    String nr_telefon=Nr_telefon.getText();
    String numeutilizator=Numeutilizator.getText();

    try {
        ConectaredB ConectaredB=new ConectaredB();
        Connection conexiune=ConectaredB.logareDB();
        PreparedStatement MG = conexiune.prepareStatement(Interogare1);


        MG.setString(1, nume);
        MG.setString(2, prenume);
        MG.setDate(3, Date.valueOf(data)); 
        MG.setString(4, ora);
        MG.setString(5, departament);
        MG.setString(6, doctor);
        MG.setString(7, nr_telefon);
        MG.setString(8, numeutilizator);

        MG.executeUpdate();

        // ...
   } catch (SQLException exceptie1) {
       exceptie1.printStackTrace(); 
   }


}
}

标签: javamysqlsqljavafx

解决方案


推荐阅读