Я работаю над небольшим приложением 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, а затем сохранить его перед выходом из приложения, чтобы к нему можно было повторно получить доступ.