Как получить данные ячейки таблицы и сохранить их в базе данных? - PullRequest
0 голосов
/ 30 апреля 2019

Я работаю над небольшим приложением JavaFX, которое сохраняет данные в виде таблицы, а затем позволяет пользователю манипулировать данными. Моя текущая проблема - сохранение данных ячейки из таблицы в базу данных.

Я не знаю, как сохранить все данные ячейки и затем обновить их в SQL с помощью запроса на обновление, основанного на первичном ключе, который в моем случае является столбцом Truck #. Основные данные, которые мне нужно сохранить, взяты из ComboBox и CheckBox, но не мешало бы получить и другие столбцы вместе с тем, как получить соответствующий Truck #. Поэтому моя цель - чтобы пользователь мог ввести какое-либо значение в comboBox, а затем щелкнуть опцию сохранения в меню и сохранить эту информацию о ячейке в базе данных, а не использовать текстовые поля и индивидуально обновлять элементы.

Все, что записано в столбце ComboBox, - это то, что должно быть сохранено https://imgur.com/a/UCOTnLm

У меня уже есть функция обновления, где пользователь может ввести конкретный Грузовик # и отредактировать другие поля, которые будут обновлять базу данных, но мне нужно, чтобы в настоящее время все в TableView было сохранено в базе данных.

public class TruckInfo {

    private CheckBox In;
    private CheckBox Out;
    private String truck_id;
    private Integer year;
    private String pallet_num;
    private String tr_class;
    private ComboBox<String> msgBox;
    private String combo;


    public TruckInfo() {
        this.truck_id = "";
        this.year = 0;
        this.pallet_num = "";
        this.tr_class = "";
        this.combo = "";

    }

    public TruckInfo(String truck_id, Integer year, String pallet_num, String tr_class, String combo) {
        this.In = new CheckBox();
        In.getStyleClass().add("check-box-style-in");

        this.Out = new CheckBox();
        Out.getStyleClass().add("check-box-style-out");

        this.truck_id = truck_id;
        this.year = year;
        this.pallet_num = pallet_num;
        this.tr_class = tr_class;
        this.msgBox = new ComboBox<String>();
        msgBox.getItems().addAll("Kenosha", "Keep Local", "Do Not Use", "Shop");
        msgBox.setEditable(true);
        msgBox.setValue(combo);
        this.combo = combo;

    }

    public String getCombo() {
        return combo;
    }

    public void setCombo(String combo) {
        this.combo = combo;
    }

    public CheckBox getIn() {
        return In;
    }
    public void setIn(CheckBox in) {
        In = in;
    }
    public CheckBox getOut() {
        return Out;
    }
    public void setOut(CheckBox out) {
        Out = out;
    }

    public String getTruck_id() {
        return truck_id;
    }

    public void setTruck_id(String truck_id) {
        this.truck_id = truck_id;
    }

    public Integer getYear() {
        return year;
    }

    public void setYear(Integer year) {
        this.year = year;
    }

    public String getPallet_num() {
        return pallet_num;
    }

    public void setPallet_num(String pallet_num) {
        this.pallet_num = pallet_num;
    }

    public String getTr_class() {
        return tr_class;
    }

    public void setTr_class(String tr_class) {
        this.tr_class = tr_class;
    }

    public ComboBox<String> getMsgBox() {
        return msgBox;
    }

    public void setMsgBox(ComboBox<String> msgBox) {
        this.msgBox = msgBox;
    }


}
public class TruckController implements Initializable {

    private TruckDAO dao;

    ObservableList<TruckInfo> obList = FXCollections.observableArrayList();
    @Override
    public void initialize(URL arg0, ResourceBundle arg1) {

        dao = new TruckDAO();

        try {
            Connection connection = new DBConnect().getConnection();

            ResultSet rs = connection.createStatement().executeQuery("SELECT * FROM truck");

            while (rs.next()) {
                obList.add(new TruckInfo(rs.getString("truck_id"), rs.getInt("year"),
                        rs.getString("pallet_num"), rs.getString("class"), rs.getString("message")));
            }
            System.out.println("Database Connected");
            connection.close();

        } catch (SQLException e) {
            Logger.getLogger(TruckController.class.getName()).log(Level.SEVERE, null, e);
        }

        inColumn.setCellValueFactory(new PropertyValueFactory<>("In"));
        outColumn.setCellValueFactory(new PropertyValueFactory<>("Out"));
        truckNumColumn.setCellValueFactory(new PropertyValueFactory<>("truck_id"));
        yearColumn.setCellValueFactory(new PropertyValueFactory<>("year"));
        palletNumColumn.setCellValueFactory(new PropertyValueFactory<>("pallet_num"));
        trClassColumn.setCellValueFactory(new PropertyValueFactory<>("tr_class"));
        msgColumn.setCellValueFactory(new PropertyValueFactory<>("msgBox"));

        truckTable.setItems(obList);

    }


    @FXML
    public TableView<TruckInfo> truckTable;

    @FXML
    public MenuBar menuBar;

    @FXML
    public TableColumn<TruckInfo, CheckBox> inColumn;

    @FXML
    public TableColumn<TruckInfo, CheckBox> outColumn;

    @FXML
    public TableColumn<TruckInfo, String> truckNumColumn;

    @FXML
    public TableColumn<TruckInfo, Integer> yearColumn;

    @FXML
    public TableColumn<TruckInfo, String> palletNumColumn;

    @FXML
    public TableColumn<TruckInfo, String> trClassColumn;

    @FXML
    public TableColumn<TruckInfo, ComboBox<String>> msgColumn;
public void save(ActionEvent event) {

        TruckInfo savedData = new TruckInfo();

        ObservableList<TruckInfo> tableData = truckTable.getItems();

        List <List<String>> arrList = new ArrayList<>();

        for(int i = 0; i < truckTable.getItems().size(); i++ ) {
            savedData = truckTable.getItems().get(i);
            arrList.add(new ArrayList<>());
            arrList.get(i).add(savedData.getTruck_id());
            arrList.get(i).add(""+savedData.getYear());
            arrList.get(i).add(""+savedData.getPallet_num());
            arrList.get(i).add(""+savedData.getTr_class());
            arrList.get(i).add(""+savedData.getCombo());

        }

        for (int i = 0; i < arrList.size(); i++) {
            for (int j = 0; j < arrList.get(i).size(); j++) {
            System.out.println(arrList.get(i).get(j));  
            }
        }

        String id = savedData.getTruck_id();
        int year = savedData.getYear();
        String pallet = savedData.getPallet_num();
    String clas = savedData.getTr_class();

        String msg = savedData.getCombo();

        String idSave = savedData.getTruck_id();

        System.out.println(msg);
        System.out.println(idSave);

        String sql = "UPDATE truck SET message = ? WHERE truck_id = '" + idSave + "'";

        try {
            Connection connection = new DBConnect().getConnection();

            PreparedStatement statement = connection.prepareStatement(sql);

            statement.setString(1, msg);

            statement.execute();
            statement.close();

        } catch (SQLException e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
    }

В результате пользователи должны будут ввести текст в столбец ComboBox, а затем сохранить его перед выходом из приложения, чтобы к нему можно было повторно получить доступ.

1 Ответ

0 голосов
/ 30 апреля 2019

Я нашел ответ, если кому-то интересно.

    public void save(ActionEvent event) {

        TruckInfo savedData = new TruckInfo();

        for(int i = 0; i < truckTable.getItems().size(); i++) {
            savedData = truckTable.getItems().get(i);
            String idSave = (String) truckNumColumn.getCellObservableValue(savedData).getValue();
            ComboBox<String> msg = (ComboBox<String>) msgColumn.getCellObservableValue(savedData).getValue();

            System.out.println(msg.getValue());
            System.out.println(idSave);

            String sql = "UPDATE truck SET message = ? WHERE truck_id = '" + idSave + "'";

            try {
                Connection connection = new DBConnect().getConnection();

                PreparedStatement statement = connection.prepareStatement(sql);

                statement.setString(1, msg.getValue());

                statement.execute();
                statement.close();

            } catch (SQLException e) {
                e.printStackTrace();
                throw new RuntimeException(e);
            }
        }   

    }

Ответ лежит в getCellObservableValue (). GetValue ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...