在购物车结帐后从 JavaFX 更新 MySQL 中的多条记录
UPDATE Multiple records in MySQL from JavaFX after checkout in Cart
我有一个购物车页面,用户可以在购买 products/medicines 后结账。我在该页面上有一个名为结帐的按钮。单击该按钮“CheckOut”后,我想在单击该按钮后从 JavaFX 更新 MySQL 中的多条记录。我希望 table 视图中每个 item/medicine 的数量根据购买的数量减少。我尝试将查询放入 for 循环中,我尝试从 table 视图中选择 selectAll。我将提供我编写的代码和带有按钮的 JavaFX tableView 的屏幕截图。任何帮助表示赞赏。感谢您从现在开始的时间和合作。
package Patient;
import Admin.Doctor.AddDoctor;
import com.jfoenix.controls.JFXButton;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.control.SelectionMode;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.layout.StackPane;
import java.sql.PreparedStatement;
import static Admin.AdminLogin.rightDown;
import static Connection.DBConnection.*;
import static sample.ChoicePage.scene;
public class CompletePurchase
{
private StackPane tablePane;
private TableView<Cart> cartTableView;
private JFXButton remove;
private JFXButton complete;
public void complete()
{
rightDown.getChildren().clear();
new AddDoctor().back();
tablePane = new StackPane();
tablePane.setMinWidth(700);
tablePane.setMinHeight(500);
tablePane.setLayoutY(90);
tablePane.setLayoutX(150);
tablePane.getChildren().clear();
remove = new JFXButton("REMOVE");
remove.setPrefWidth(200);
remove.setPrefHeight(35);
remove.setLayoutX(300);
remove.setLayoutY(600);
remove.getStyleClass().add("loginButton");
remove.setOnAction((e)->{
try
{
Cart cart = cartTableView.getSelectionModel().getSelectedItem();
String removeQuery = "DELETE FROM Cart WHERE MedicineID = ?";
preparedStatement = connection.prepareStatement(removeQuery);
preparedStatement.setString(1,cart.getMedicineID());
preparedStatement.executeUpdate();
preparedStatement.close();
cartTableView.getItems().removeAll(cartTableView.getSelectionModel().getSelectedItem());
}
catch(Exception e1)
{
e1.printStackTrace();
}
});
rightDown.getChildren().add(remove);
complete = new JFXButton("CHECKOUT");
complete.setPrefWidth(200);
complete.setPrefHeight(35);
complete.setLayoutX(600);
complete.setLayoutY(600);
complete.getStyleClass().add("loginButton");
complete.setOnAction((e)->{
try
{
cartTableView.getSelectionModel().selectAll();
int num = cartTableView.getItems().size();
Cart cart = cartTableView.getSelectionModel().getSelectedItem();
String updateQuery = "UPDATE Medicine SET Quantity = Quantity - ? WHERE MedicineID = ?";
preparedStatement = connection.prepareStatement(updateQuery);
preparedStatement.setString(1,cart.getQuantity());
preparedStatement.setString(2,cart.getMedicineID());
preparedStatement.executeUpdate();
preparedStatement.close();
}
catch(Exception e1)
{
e1.printStackTrace();
}
});
rightDown.getChildren().add(complete);
ObservableList<Cart> cartObservableList = FXCollections.observableArrayList();
TableColumn<Cart,String> PatientID = new TableColumn<>("PATIENT ID");
PatientID.setCellValueFactory(new PropertyValueFactory<>("PatientID"));
PatientID.setPrefWidth(116);
TableColumn<Cart,String> MedicineID = new TableColumn<>("MEDICINE ID");
MedicineID.setCellValueFactory(new PropertyValueFactory<>("MedicineID"));
MedicineID.setPrefWidth(116);
TableColumn<Cart,String> MedicineName = new TableColumn<>("MEDICINE NAME");
MedicineName.setCellValueFactory(new PropertyValueFactory<>("MedicineName"));
MedicineName.setPrefWidth(116);
TableColumn<Cart,String> Price = new TableColumn<>("PRICE");
Price.setCellValueFactory(new PropertyValueFactory<>("Price"));
Price.setPrefWidth(116);
TableColumn<Cart,String> Quantity = new TableColumn<>("QUANTITY");
Quantity.setCellValueFactory(new PropertyValueFactory<>("Quantity"));
Quantity.setPrefWidth(116);
TableColumn<Cart,String> TotalPrice = new TableColumn<>("TOTAL PRICE");
TotalPrice.setCellValueFactory(new PropertyValueFactory<>("TotalPrice"));
TotalPrice.setPrefWidth(116);
try
{
resultSet = connection.createStatement().executeQuery("SELECT * FROM Cart");
while (resultSet.next())
{
cartObservableList.add(new Cart(
resultSet.getString("PatientID"),
resultSet.getString("MedicineID"),
resultSet.getString("MedicineName"),
resultSet.getString("Price"),
resultSet.getString("Quantity"),
resultSet.getString("TotalPrice")
));
}
}
catch(Exception e1)
{
e1.printStackTrace();
}
cartTableView = new TableView<>();
cartTableView.getColumns().addAll(PatientID,MedicineID,MedicineName,Price,Quantity,TotalPrice);
cartTableView.setItems(cartObservableList);
cartTableView.getSelectionModel().setSelectionMode(
SelectionMode.MULTIPLE
);
cartTableView.setMinWidth(700);
cartTableView.setMinHeight(500);
cartTableView.setLayoutY(0);
cartTableView.setLayoutX(0);
tablePane.getChildren().add(cartTableView);
rightDown.getChildren().addAll(tablePane);
scene.getStylesheets().add("Admin/Doctor/AddDoctor.css");
}
}
购物车的屏幕截图
因为您正在使用 PreparedStatement
所以你可以使用 addBatch() 方法,它在内部存储所有查询并组合执行它们,而不是像你在循环中所做的那样一个一个地执行。
此外,这里使用事务是很好的。
您可以在批处理的开头使用适当的 begin transaction
命令,然后添加所有相关查询,在您的情况下更新查询,然后最后添加 commit command
然后执行它。对于任何类型的错误,所有更新都将回滚,如果更新成功,您的查询将立即执行,您不需要使用任何循环来逐个执行查询
这是一篇文章
PreparedStatememt Batchs
检查这个标题PreparedStatement Batch Updates
希望你的问题早日得到解决
我有一个购物车页面,用户可以在购买 products/medicines 后结账。我在该页面上有一个名为结帐的按钮。单击该按钮“CheckOut”后,我想在单击该按钮后从 JavaFX 更新 MySQL 中的多条记录。我希望 table 视图中每个 item/medicine 的数量根据购买的数量减少。我尝试将查询放入 for 循环中,我尝试从 table 视图中选择 selectAll。我将提供我编写的代码和带有按钮的 JavaFX tableView 的屏幕截图。任何帮助表示赞赏。感谢您从现在开始的时间和合作。
package Patient;
import Admin.Doctor.AddDoctor;
import com.jfoenix.controls.JFXButton;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.control.SelectionMode;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.layout.StackPane;
import java.sql.PreparedStatement;
import static Admin.AdminLogin.rightDown;
import static Connection.DBConnection.*;
import static sample.ChoicePage.scene;
public class CompletePurchase
{
private StackPane tablePane;
private TableView<Cart> cartTableView;
private JFXButton remove;
private JFXButton complete;
public void complete()
{
rightDown.getChildren().clear();
new AddDoctor().back();
tablePane = new StackPane();
tablePane.setMinWidth(700);
tablePane.setMinHeight(500);
tablePane.setLayoutY(90);
tablePane.setLayoutX(150);
tablePane.getChildren().clear();
remove = new JFXButton("REMOVE");
remove.setPrefWidth(200);
remove.setPrefHeight(35);
remove.setLayoutX(300);
remove.setLayoutY(600);
remove.getStyleClass().add("loginButton");
remove.setOnAction((e)->{
try
{
Cart cart = cartTableView.getSelectionModel().getSelectedItem();
String removeQuery = "DELETE FROM Cart WHERE MedicineID = ?";
preparedStatement = connection.prepareStatement(removeQuery);
preparedStatement.setString(1,cart.getMedicineID());
preparedStatement.executeUpdate();
preparedStatement.close();
cartTableView.getItems().removeAll(cartTableView.getSelectionModel().getSelectedItem());
}
catch(Exception e1)
{
e1.printStackTrace();
}
});
rightDown.getChildren().add(remove);
complete = new JFXButton("CHECKOUT");
complete.setPrefWidth(200);
complete.setPrefHeight(35);
complete.setLayoutX(600);
complete.setLayoutY(600);
complete.getStyleClass().add("loginButton");
complete.setOnAction((e)->{
try
{
cartTableView.getSelectionModel().selectAll();
int num = cartTableView.getItems().size();
Cart cart = cartTableView.getSelectionModel().getSelectedItem();
String updateQuery = "UPDATE Medicine SET Quantity = Quantity - ? WHERE MedicineID = ?";
preparedStatement = connection.prepareStatement(updateQuery);
preparedStatement.setString(1,cart.getQuantity());
preparedStatement.setString(2,cart.getMedicineID());
preparedStatement.executeUpdate();
preparedStatement.close();
}
catch(Exception e1)
{
e1.printStackTrace();
}
});
rightDown.getChildren().add(complete);
ObservableList<Cart> cartObservableList = FXCollections.observableArrayList();
TableColumn<Cart,String> PatientID = new TableColumn<>("PATIENT ID");
PatientID.setCellValueFactory(new PropertyValueFactory<>("PatientID"));
PatientID.setPrefWidth(116);
TableColumn<Cart,String> MedicineID = new TableColumn<>("MEDICINE ID");
MedicineID.setCellValueFactory(new PropertyValueFactory<>("MedicineID"));
MedicineID.setPrefWidth(116);
TableColumn<Cart,String> MedicineName = new TableColumn<>("MEDICINE NAME");
MedicineName.setCellValueFactory(new PropertyValueFactory<>("MedicineName"));
MedicineName.setPrefWidth(116);
TableColumn<Cart,String> Price = new TableColumn<>("PRICE");
Price.setCellValueFactory(new PropertyValueFactory<>("Price"));
Price.setPrefWidth(116);
TableColumn<Cart,String> Quantity = new TableColumn<>("QUANTITY");
Quantity.setCellValueFactory(new PropertyValueFactory<>("Quantity"));
Quantity.setPrefWidth(116);
TableColumn<Cart,String> TotalPrice = new TableColumn<>("TOTAL PRICE");
TotalPrice.setCellValueFactory(new PropertyValueFactory<>("TotalPrice"));
TotalPrice.setPrefWidth(116);
try
{
resultSet = connection.createStatement().executeQuery("SELECT * FROM Cart");
while (resultSet.next())
{
cartObservableList.add(new Cart(
resultSet.getString("PatientID"),
resultSet.getString("MedicineID"),
resultSet.getString("MedicineName"),
resultSet.getString("Price"),
resultSet.getString("Quantity"),
resultSet.getString("TotalPrice")
));
}
}
catch(Exception e1)
{
e1.printStackTrace();
}
cartTableView = new TableView<>();
cartTableView.getColumns().addAll(PatientID,MedicineID,MedicineName,Price,Quantity,TotalPrice);
cartTableView.setItems(cartObservableList);
cartTableView.getSelectionModel().setSelectionMode(
SelectionMode.MULTIPLE
);
cartTableView.setMinWidth(700);
cartTableView.setMinHeight(500);
cartTableView.setLayoutY(0);
cartTableView.setLayoutX(0);
tablePane.getChildren().add(cartTableView);
rightDown.getChildren().addAll(tablePane);
scene.getStylesheets().add("Admin/Doctor/AddDoctor.css");
}
}
购物车的屏幕截图
因为您正在使用 PreparedStatement
所以你可以使用 addBatch() 方法,它在内部存储所有查询并组合执行它们,而不是像你在循环中所做的那样一个一个地执行。
此外,这里使用事务是很好的。
您可以在批处理的开头使用适当的 begin transaction
命令,然后添加所有相关查询,在您的情况下更新查询,然后最后添加 commit command
然后执行它。对于任何类型的错误,所有更新都将回滚,如果更新成功,您的查询将立即执行,您不需要使用任何循环来逐个执行查询
这是一篇文章 PreparedStatememt Batchs
检查这个标题PreparedStatement Batch Updates
希望你的问题早日得到解决