日期数据未显示在表格视图中

时间:2018-10-20 23:10:58

标签: javafx

大家好,Date值未显示在表格视图中,我传递了正确的参数,但我认为我需要格式化Date数据以将该数据转换为string值,我正在使用{{1}的Object PropertyDate的{​​{1}}和SimpleStringProperty

在插入方法中,我使用SimpleIntergerProperty将数据保存在数据库中,这看起来还不错,我在数据库name, lastname, and ID中声明为preparedstatement,但是当我显示日期时数据放入fecha_nacimiento中,就像我在表列显示为空之前所说的

我将所有代码都放在此处以修正或改进该错误,我需要一些帮助来检查表Date中将表列日期的值转换为字符串的过程。

任何帮助都将有所帮助。问候。

表格视图中的日期数据为空:

控制器@Daniel Subelman中的修改1:

修改2类角色@Daniel Subelman:

修改后的问题@Daniel Subelman:

构造函数异常错误1:

不受支持的操作错误:

空指针异常错误:

这是我的tableview代码

setting or formating

这是我的controller代码

   package application;


import java.io.IOException;
import java.net.URL;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.time.LocalDate;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.ResourceBundle;

import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.Button;
import javafx.scene.control.DatePicker;
import javafx.scene.control.MenuBar;
import javafx.scene.control.TableCell;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.stage.Stage;





public class ConexionController implements Initializable {



        @FXML TableView<Persona>  tablacliente;
        @FXML TableColumn<Persona, String> nombrescol;
        @FXML TableColumn<Persona,String > apellidoscol;
        @FXML TableColumn<Persona, Integer>  clienteid;
        @FXML TableColumn<Persona,LocalDate>  fechacli;
        ResultSet rs=null;
        Connection Conexion=null;
        @FXML private Button btn;
        @FXML private Button mtn;
        @FXML private Button lmp;
        @FXML private Button mts;
        @FXML private Button bqd;
        @FXML private Button bqape;
        @FXML private TextField nm;
        @FXML private TextField ap;
        @FXML private TextField bq;
        @FXML private TextField bqa;
        @FXML private MenuBar menucombo;
        @FXML private Button botonborrar;
        @FXML private TextField borrar;
        @FXML private DatePicker mifecha;

        @Override


        public void initialize(URL arg0, ResourceBundle arg1) {
            clienteid.setCellValueFactory(new PropertyValueFactory <Persona, Integer>("id_cliente"));
            nombrescol.setCellValueFactory(new PropertyValueFactory <Persona, String>("nombres"));
             apellidoscol.setCellValueFactory(new PropertyValueFactory <Persona, String>("apellidos"));
            //fechacli.setCellValueFactory(new PropertyValueFactory <Persona, LocalDate>("fechacliente"));//

             DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");

             fechacli.setCellFactory(column -> {
                 return new TableCell<Persona, LocalDate>() {
                     @Override
                     protected void updateItem(LocalDate item, boolean empty) {
                         super.updateItem(item, empty);

                         if (item == null || empty) {
                             setText(null);
                         } else {
                             setText(formatter.format(item));

                         }
                     }
                 };
             });

             seleccionaregistros();
             seleccionanombre();
             seleccionapellido(); 
        }



        public void borraregistro() {
             int id = Integer.parseInt(borrar.getText());
             String consulta=" delete  from cliente where id=? ";

             Connection conn=null;{

                  try {

                      conn=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=prueba", "sa", "milkas87");
                      PreparedStatement ps =conn.prepareStatement(consulta);
                      ps.setInt(1, id);
                      ps.executeQuery();


                  }catch (SQLException e) {
                      e.printStackTrace();
                  }
                  Alert alert = new Alert(AlertType.INFORMATION);
                  alert.setTitle("Informacion");
                  alert.setHeaderText(null);
                  alert.setContentText("Registro borrado correctamente");
                  alert.showAndWait();      
             }
             seleccionaregistros();
        } 


    public void conexion(){

        try {
            Conexion=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=prueba", "sa", "milkas87");

            } 

        catch (SQLException e) {
             e.printStackTrace();
         }
         if(Conexion!=null) {
             Alert alert = new Alert(AlertType.INFORMATION);
             alert.setTitle("Informacion");
             alert.setHeaderText(null);
             alert.setContentText("Conexion Exitosa");
             alert.showAndWait();

         }

    }

    public void insertaregistro() {

          Connection conn=null;
             try {

                 conn = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=prueba", "sa", "milkas87");
                 Statement insertar=conn.createStatement();
                 insertar.executeUpdate("insert into cliente (nombre, apellido,fecha_nacimiento) values ('"+nm.getText()+"', '"+ap.getText()+"', '"+((TextField)mifecha.getEditor()).getText()+"')");

                 if(conn!=null) {
                     Alert alert = new Alert(AlertType.INFORMATION);
                     alert.setTitle("Informacion");
                     alert.setHeaderText(null);
                     alert.setContentText("Registro Insertado correctamente");
                     alert.showAndWait();
                 }

             } catch (SQLException e) {
                 e.printStackTrace();
             }
             seleccionaregistros();

    }


    public void seleccionaregistros() {
        ObservableList <Persona> data =FXCollections.observableArrayList();
          Connection conn=null;{
              try {

                 conn = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=prueba", "sa", "milkas87");
                  Statement mostrar=conn.createStatement();
                  ResultSet rs;
                  rs= mostrar.executeQuery("select * from cliente");


                  while ( rs.next() ) 
                  {
                     data.add(new Persona(

                             rs.getString("nombre"),
                             rs.getString("apellido"),
                             rs.getInt("id"),
                             rs.getDate(4).toInstant().atZone(ZoneId.systemDefault()).toLocalDate())
                             );
                     tablacliente.setItems(data);
                  }

              } catch (SQLException e) {
                  e.printStackTrace();
              }

         }

    }

    public void seleccionanombre() {
         String nombre = bq.getText();
        ObservableList <Persona> busqueda =FXCollections.observableArrayList();
         String consulta=" select * from cliente where nombre like ? " ;

         Connection conn=null;{

              try {

                  conn = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=prueba", "sa", "milkas87");
                  PreparedStatement ps =conn.prepareStatement(consulta);
                  ps.setString(1, nombre);
                  ResultSet rs =ps.executeQuery();

                 while ( rs.next() ) 
                  {
                     busqueda.add(new Persona(

                             rs.getString("nombre"),
                             rs.getString("apellido"),
                             rs.getInt("id"),
                             rs.getDate(4).toInstant().atZone(ZoneId.systemDefault()).toLocalDate())
                             );

                  }

              } catch (SQLException e) {
                  e.printStackTrace();
              }

              tablacliente.setItems(busqueda); 
         }

    }

    public void seleccionapellido() {
         String apellido = bqa.getText();
        ObservableList <Persona> busquedape =FXCollections.observableArrayList();
         String consulta=" select * from cliente where apellido like ? " ;

         Connection conn=null;{

              try {

                  conn = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=prueba", "sa", "milkas87");
                  PreparedStatement ps =conn.prepareStatement(consulta);
                  ps.setString(1, apellido);
                  ResultSet rs =ps.executeQuery();

                 while ( rs.next() ) 
                  {
                     busquedape.add(new Persona(

                             rs.getString("nombre"),
                             rs.getString("apellido"),
                             rs.getInt("id"),
                             rs.getDate(4).toInstant().atZone(ZoneId.systemDefault()).toLocalDate())
                             );

                  }

              } catch (SQLException e) {
                  e.printStackTrace();
              }

              tablacliente.setItems(busquedape); 
         }

    }

    public void inicializacombo() {
         try {
                FXMLLoader fxmlLoader = new FXMLLoader();
                fxmlLoader.setLocation(getClass().getResource("VistaCombo.fxml"));
                Scene scene = new Scene(fxmlLoader.load());
                Stage stage = new Stage();
                stage.setTitle("Datos Del Cliente");
                stage.setScene(scene);
                stage.show();
            } catch (IOException e) {

            }
    }

    public void limpiatexto() {
        nm.clear();
        ap.clear();
        bq.clear();
        bqa.clear();
        borrar.clear();
    }


    public void cargarconexion() {
     btn.setOnAction(e->{
            conexion();
        });
    }

    public void cargarregistro() {
         mtn.setOnAction(e->{
                insertaregistro();
            });
        }
    public void borrarcasillatexto() {
         lmp.setOnAction(e->{
                limpiatexto();
            });
        }

    public void mostrartodo() {
        mts.setOnAction(e->{
            seleccionaregistros();
        });
    }

    public void buscanm() {
         bqd.setOnAction(e->{
          seleccionanombre();

            });
    }

    public void buscaape() {
        bqape.setOnAction(e->{
        seleccionapellido();

      });
    }

    public void borraregistroid() {
        botonborrar.setOnAction(e->{
            borraregistro();

      });
    }

}

这是我的Persona Class代码

 package application;


import java.time.LocalDate;

import javafx.beans.property.IntegerProperty;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;

public class Persona {



    private StringProperty nombres;
    private StringProperty apellidos;
    private IntegerProperty id_cliente;
    private ObjectProperty <LocalDate>fechacliente;

    public Persona (String nombres, String apellidos, Integer id_cliente, LocalDate fechacliente) {
        this.nombres=  new SimpleStringProperty (nombres);
        this.apellidos= new SimpleStringProperty ( apellidos);
        this.id_cliente=new SimpleIntegerProperty (id_cliente);
        this.fechacliente= new SimpleObjectProperty<>(fechacliente);
    }


public LocalDate getFechaCliente() {
        return fechacliente.get();
}
public void setFechaCliente(LocalDate fechacliente) {
        this.fechacliente = new SimpleObjectProperty<>(fechacliente);
}
public ObjectProperty<LocalDate> fechaClienteProperty() {
        return fechacliente;
}

public String getNombres() {
    return nombres.get();
}

public  void  setNombres(String nombres) {
    this.nombres=new SimpleStringProperty (nombres);
}


public String getApellidos() {
    return apellidos.get();
}

public  void  setApellidos(String apellidos) {
    this.apellidos=new SimpleStringProperty ( apellidos);
}


public Integer getId_cliente() {
    return id_cliente.get();
}

public  void  setid_cliente(Integer id_cliente) {
    this.id_cliente=new SimpleIntegerProperty (id_cliente);
}

}

这是控制台中的错误

FXML

1 个答案:

答案 0 :(得分:0)

我必须修改您的代码才能使其工作而无需连接到数据库。这些更改将使其起作用。

  1. 在您的Persona类中:

    • 将构造函数更改为:

      public Persona (String nombres, String apellidos, Integer id_cliente, LocalDate fechacliente) {
          this.nombres=  new SimpleStringProperty (nombres);
          this.apellidos= new SimpleStringProperty ( apellidos);
          this.id_cliente=new SimpleIntegerProperty (id_cliente);
          this.fechacliente= new SimpleObjectProperty<>(fechacliente);
      }
      
    • 更改fechacliente的getter和setter:

      public LocalDate getFechaCliente() {
          return fechacliente.get();
      }
      public void setFechaCliente(LocalDate fechacliente) {
          this.fechacliente = new SimpleObjectProperty<>(fechacliente);
      }
      
    • 添加fechaClienteProperty

      public ObjectProperty<LocalDate> fechaClienteProperty() {
          return fechacliente;
      }
      
  2. 在您的ConexionController中,将CellValueFactoryCellFactory更改为:

        fechacli.setCellValueFactory(cellData -> cellData.getValue().fechaClienteProperty());
    
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MMyyyy");
    
        fechacli.setCellFactory(column -> {
            return new TableCell<Persona, LocalDate>() {
                @Override
                protected void updateItem(LocalDate item, boolean empty) {
                    super.updateItem(item, empty);
    
                    if (item == null || empty) {
                        setText(null);
                    } else {
                        setText(formatter.format(item));
    
                    }
                }
            };
        });
    

通过此更正可以正常工作。希望这会有所帮助。