Actualizar y eliminar no funciona con la base de datos MySQL utilizando JavaFX

Charith enero yasanka:

Problema: Estoy tratando de crear un sistema de reserva de vehículos y quiero mostrar la actualización de una base de datos cuando las reservas de usuario de un vehículo particular, que aparecen en la vista de tabla y también eliminar el número de la placa. He comprobado el doble de la consulta, pero no funciona a través del código ni en sql phpmyadmin. El código se muestra a continuación:

public class PrintCar extends Application implements Initializable {

    public TableColumn col_plateNum;
    public TableColumn col_air;
    public TableColumn col_seats;
    public TableColumn col_make;
    public TableColumn col_miles;
    public TableColumn col_year;
    public TableColumn col_price;
    public TableColumn col_color;
    public TableView table;
    public TextField plateNum;
    public DatePicker dateReserved;
    public TableColumn col_ID;
    public TableColumn col_reservedDate;
    public TableColumn col_reserved;
    ResultSet rs;


    @Override
    public void start(Stage stage) throws Exception {
        Parent root= FXMLLoader.load(getClass().getResource("../GUI/PrintCar.fxml"));
        stage.setTitle("JavaFX 2 Login");
        stage.setScene(new Scene(root, 327,700));
        stage.show();



    }

    ObservableList<Vehicle> obList = FXCollections.observableArrayList();

    @Override
    public void initialize(URL url, ResourceBundle resourceBundle) {

        ConnectionClass connectionClass=new ConnectionClass();
        Connection connection=connectionClass.getConnection();
        PreparedStatement ps;

        try {
            ps = connection.prepareStatement("select * from cars ");
            rs = ps.executeQuery();
            obList.clear();
            while(rs.next()){
                obList.add(new Car(rs.getString(1),rs.getString(2),
                        rs.getString(3), rs.getString(4), rs.getString(5)
                ,rs.getString(6), rs.getString(7), rs.getString(8), rs.getString(9), rs.getString(10), rs.getString(11)));

            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        col_ID.setCellValueFactory(new PropertyValueFactory<>("ID"));
        col_plateNum.setCellValueFactory(new PropertyValueFactory<>("plateNumber"));
        col_color.setCellValueFactory(new PropertyValueFactory<>("Color"));
        col_price.setCellValueFactory(new PropertyValueFactory<>("pricePerKilometer"));
        col_year.setCellValueFactory(new PropertyValueFactory<>("year"));
        col_miles.setCellValueFactory(new PropertyValueFactory<>("milesTravelled"));
        col_make.setCellValueFactory(new PropertyValueFactory<>("make"));
        col_seats.setCellValueFactory(new PropertyValueFactory<>("maxPassengers"));
        col_air.setCellValueFactory(new PropertyValueFactory<>("airConditioned"));
        col_reserved.setCellValueFactory(new PropertyValueFactory<>("reserved"));
        col_reservedDate.setCellValueFactory(new PropertyValueFactory<>("reservedDate"));



        table.setItems(obList);
        table.getSortOrder().add(col_ID);
        table.getSortOrder().add(col_miles);
        table.getSortOrder().add(col_make);
        table.getSortOrder().add(col_reservedDate);


    }

    public void reserveCar(ActionEvent actionEvent) throws SQLException {

        ConnectionClass connectionClass=new ConnectionClass();
        Connection connection=connectionClass.getConnection();
        PreparedStatement ps;
        PreparedStatement ps1;
        String mainSQL="SET SQL_SAFE_UPDATES = 0;";
        String sql = "UPDATE `cars` SET `Reserved`= ? ,`Reserved Date`= ? WHERE 'ID' = '"+plateNum.getText()+"'";

        try {
            ps1 = connection.prepareStatement(mainSQL);
            ps = connection.prepareStatement(sql);
            ps.setString(1, "Yes");
            ps.setString(2, dateReserved.getValue().toString());
            ps1.executeQuery();
            ps.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }

        Alert alert = new Alert(Alert.AlertType.INFORMATION);
        alert.setTitle("Database Confirmation");
        alert.setHeaderText("Success!");
        alert.setContentText("Data Successfully added to Database");
        alert.showAndWait();

        plateNum.setText("");
        dateReserved.setValue(null);
    }

    public void deleteCar(ActionEvent actionEvent) {
        ConnectionClass connectionClass=new ConnectionClass();
        Connection connection=connectionClass.getConnection();
        PreparedStatement ps;
        String sql = "DELETE FROM `cars` WHERE 'Plate Number' = '"+plateNum.getText()+"'";

        try {
            ps = connection.prepareStatement(sql);
            ps.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }

        Alert alert = new Alert(Alert.AlertType.INFORMATION);
        alert.setTitle("Database Confirmation");
        alert.setHeaderText("Success!");
        alert.setContentText("Data Successfully added to Database");
        alert.showAndWait();

        plateNum.setText("");
        dateReserved.setValue(null);

    }
}
Andrea Annibali:

En MySQL utilizando el " carácter (comilla simple) para especificar un nombre de columna en un predicado de la consulta SQL, se interpreta como una cadena y no como una columna de tabla de base de datos. Es el ` caracteres (tilde) que delimita identificadores.

Así que una consulta como:

SELECT * from cars WHERE 'Plate Number' = 'ABC' 

Nunca devuelve ninguna fila, a menos que la cadena que se va a comparar es 'número de matrícula' en sí:

SELECT * from cars WHERE 'Plate Number' = 'Plate Number'

en cuyo caso se le da todo el conjunto de filas de la tabla. Así que la forma correcta de escribir la consulta es:

SELECT * from cars WHERE `Plate Number` = 'ABC'

es decir, con el ** ** (backtick) character. In your case inreserveCar` la consulta se debe especificar en esta forma:

String sql = "UPDATE `cars` SET `Reserved`= ? ,`Reserved Date`= ? WHERE `ID` = '"+plateNum.getText()+"'";

y en deleteCarel método:

String sql = "DELETE FROM `cars` WHERE 'Plate Number' = '"+plateNum.getText()+"'";

Otra cosa importante a destacar es que para evitar problemas de seguridad como la inyección SQL, es preferible utilizar el PreparedStatementforzando la entrada del usuario para ser manejado como el contenido de un parámetro y no como parte del comando SQL. Así, por ejemplo, sería mejor modificar el deleteCarmétodo de la siguiente manera:

public void deleteCar(ActionEvent actionEvent) {
     ConnectionClass connectionClass=new ConnectionClass();
     Connection connection=connectionClass.getConnection();
     PreparedStatement ps;
     String sql = "DELETE FROM `cars` WHERE `Plate Number` = ? ";

     try {
         ps = connection.prepareStatement(sql);
         stmt.setString(1, plateNum.getText());
         ps.executeUpdate();
     } catch (SQLException e) {
         e.printStackTrace();
     }

     Alert alert = new Alert(Alert.AlertType.INFORMATION);
     alert.setTitle("Database Confirmation");
     alert.setHeaderText("Success!");
     alert.setContentText("Data Successfully added to Database");
     alert.showAndWait();

     plateNum.setText("");
     dateReserved.setValue(null);
}

Supongo que te gusta

Origin http://10.200.1.11:23101/article/api/json?id=434802&siteId=1
Recomendado
Clasificación