3
connectionpetstore.properties
Normal file
3
connectionpetstore.properties
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
url=jdbc:mysql://127.0.0.1:3306/Petstoredb?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC
|
||||||
|
user=petapp
|
||||||
|
password=petapppass
|
||||||
@@ -1,11 +1,24 @@
|
|||||||
package org.example.petshopdesktop.controllers;
|
package org.example.petshopdesktop.controllers;
|
||||||
|
|
||||||
|
import javafx.collections.FXCollections;
|
||||||
|
import javafx.collections.ObservableList;
|
||||||
import javafx.event.ActionEvent;
|
import javafx.event.ActionEvent;
|
||||||
import javafx.fxml.FXML;
|
import javafx.fxml.FXML;
|
||||||
import javafx.scene.control.Button;
|
import javafx.fxml.FXMLLoader;
|
||||||
import javafx.scene.control.TableColumn;
|
import javafx.scene.Scene;
|
||||||
import javafx.scene.control.TableView;
|
import javafx.scene.control.*;
|
||||||
import javafx.scene.control.TextField;
|
import javafx.scene.control.cell.PropertyValueFactory;
|
||||||
|
import javafx.stage.Modality;
|
||||||
|
import javafx.stage.Stage;
|
||||||
|
import org.example.petshopdesktop.controllers.dialogcontrollers.PetDialogController;
|
||||||
|
import org.example.petshopdesktop.database.PetDB;
|
||||||
|
import org.example.petshopdesktop.database.ProductDB;
|
||||||
|
import org.example.petshopdesktop.models.Pet;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import java.sql.SQLIntegrityConstraintViolationException;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
public class PetController {
|
public class PetController {
|
||||||
|
|
||||||
@@ -19,45 +32,191 @@ public class PetController {
|
|||||||
private Button btnEdit;
|
private Button btnEdit;
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
private TableColumn<?, ?> colPetAge;
|
private TableColumn<Pet, Integer> colPetAge;
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
private TableColumn<?, ?> colPetBreed;
|
private TableColumn<Pet, String> colPetBreed;
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
private TableColumn<?, ?> colPetId;
|
private TableColumn<Pet, Integer> colPetId;
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
private TableColumn<?, ?> colPetName;
|
private TableColumn<Pet, String> colPetName;
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
private TableColumn<?, ?> colPetPrice;
|
private TableColumn<Pet, Double> colPetPrice;
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
private TableColumn<?, ?> colPetSpecies;
|
private TableColumn<Pet, String> colPetSpecies;
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
private TableColumn<?, ?> colPetStatus;
|
private TableColumn<Pet, String> colPetStatus;
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
private TableView<?> tvPets;
|
private TableView<Pet> tvPets;
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
private TextField txtSearch;
|
private TextField txtSearch;
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
void btnAddClicked(ActionEvent event) {
|
void btnAddClicked(ActionEvent event) {
|
||||||
|
mode = "Add";
|
||||||
|
openDialog(null,mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
void btnDeleteClicked(ActionEvent event) {
|
void btnDeleteClicked(ActionEvent event) {
|
||||||
|
int numRows = 0;
|
||||||
|
Pet selectedPet = tvPets.getSelectionModel().getSelectedItem();
|
||||||
|
|
||||||
|
//ask user to confirm
|
||||||
|
Alert question = new Alert(Alert.AlertType.CONFIRMATION);
|
||||||
|
question.setHeaderText("Please confirm delete");
|
||||||
|
question.setContentText("Are you sure you want to delete this pet?");
|
||||||
|
Optional<ButtonType> result = question.showAndWait(); //show alert and wait for response
|
||||||
|
|
||||||
|
//if confirmed,start deletion
|
||||||
|
if (result.isPresent() && result.get() == ButtonType.OK) {
|
||||||
|
int petId = selectedPet.getPetId();
|
||||||
|
|
||||||
|
//try deleting
|
||||||
|
try{
|
||||||
|
numRows = PetDB.deletePet(petId);
|
||||||
|
}
|
||||||
|
catch (SQLIntegrityConstraintViolationException e){
|
||||||
|
Alert alert = new Alert(Alert.AlertType.ERROR);
|
||||||
|
alert.setHeaderText("Database Operation Error");
|
||||||
|
alert.setContentText("Delete failed\n" +
|
||||||
|
"the selected pet is being referred in another table");
|
||||||
|
alert.showAndWait();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
catch (SQLException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
//prompt user of any errors
|
||||||
|
if (numRows == 0){
|
||||||
|
Alert alert = new Alert(Alert.AlertType.ERROR);
|
||||||
|
alert.setHeaderText("Database Operation Error");
|
||||||
|
alert.setContentText("Delete failed");
|
||||||
|
alert.showAndWait();
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
//prompt user of delete conformation
|
||||||
|
Alert alert = new Alert(Alert.AlertType.CONFIRMATION);
|
||||||
|
alert.setHeaderText("Database Operation Confirmed");
|
||||||
|
alert.setContentText("Delete successful");
|
||||||
|
alert.showAndWait();
|
||||||
|
//refresh display and reset inputs
|
||||||
|
displayPets();
|
||||||
|
btnDelete.setDisable(true);
|
||||||
|
btnEdit.setDisable(true);
|
||||||
|
txtSearch.setText("");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
void btnEditClicked(ActionEvent event) {
|
void btnEditClicked(ActionEvent event) {
|
||||||
|
Pet selectedPet = tvPets.getSelectionModel().getSelectedItem();
|
||||||
|
|
||||||
|
if(selectedPet != null){
|
||||||
|
mode = "Edit";
|
||||||
|
openDialog(selectedPet,mode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private ObservableList<Pet> data = FXCollections.observableArrayList();
|
||||||
|
String mode = null;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
void initialize() {
|
||||||
|
btnEdit.setDisable(true);
|
||||||
|
btnDelete.setDisable(true);
|
||||||
|
|
||||||
|
colPetId.setCellValueFactory(new PropertyValueFactory<Pet,Integer>("petId"));
|
||||||
|
colPetName.setCellValueFactory(new PropertyValueFactory<Pet,String>("petName"));
|
||||||
|
colPetSpecies.setCellValueFactory(new PropertyValueFactory<Pet,String>("petSpecies"));
|
||||||
|
colPetBreed.setCellValueFactory(new PropertyValueFactory<Pet,String>("petBreed"));
|
||||||
|
colPetAge.setCellValueFactory(new PropertyValueFactory<Pet,Integer>("petAge"));
|
||||||
|
colPetStatus.setCellValueFactory(new PropertyValueFactory<Pet,String>("petStatus"));
|
||||||
|
colPetPrice.setCellValueFactory(new PropertyValueFactory<Pet,Double>("petPrice"));
|
||||||
|
|
||||||
|
displayPets();
|
||||||
|
|
||||||
|
tvPets.getSelectionModel().selectedItemProperty().addListener(
|
||||||
|
(observable, oldValue, newValue) -> {
|
||||||
|
btnEdit.setDisable(false);
|
||||||
|
btnDelete.setDisable(false);
|
||||||
|
});
|
||||||
|
|
||||||
|
txtSearch.textProperty().addListener((observable, oldValue, newValue) -> {
|
||||||
|
displayFilteredPet(newValue);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private void displayFilteredPet(String filter) {
|
||||||
|
data.clear();
|
||||||
|
try{
|
||||||
|
if (txtSearch.getText() == null || txtSearch.getText().isEmpty()){
|
||||||
|
displayPets();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
data = PetDB.getFilteredPets(filter);
|
||||||
|
tvPets.setItems(data);
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
System.out.println("Error while fetching table data: " + e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void displayPets() {
|
||||||
|
data.clear();
|
||||||
|
|
||||||
|
try{
|
||||||
|
data = PetDB.getPets();
|
||||||
|
}
|
||||||
|
catch(SQLException e){
|
||||||
|
System.out.println("Error while fetching table data: " + e.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
tvPets.setItems(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void openDialog(Pet pet, String mode){
|
||||||
|
//Get new view
|
||||||
|
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/org/example/petshopdesktop/dialogviews/pet-dialog-view.fxml"));
|
||||||
|
Scene scene = null;
|
||||||
|
try{
|
||||||
|
scene = new Scene(fxmlLoader.load());
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
PetDialogController dialogController = fxmlLoader.getController(); //controller associated with this view
|
||||||
|
dialogController.setMode(mode);
|
||||||
|
|
||||||
|
//Open the dialog depending on the mode
|
||||||
|
if(mode.equals("Edit")){
|
||||||
|
//Make it display pet details in dialog
|
||||||
|
dialogController.displayPetDetails(pet);
|
||||||
|
}
|
||||||
|
Stage dialogStage = new Stage();
|
||||||
|
dialogStage.initModality(Modality.APPLICATION_MODAL); //make it modal
|
||||||
|
if(mode.equals("Add")){
|
||||||
|
dialogStage.setTitle("Add Pet");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
dialogStage.setTitle("Edit Pet");
|
||||||
|
}
|
||||||
|
dialogStage.setScene(scene);
|
||||||
|
dialogStage.showAndWait();
|
||||||
|
|
||||||
|
//When dialog closes update table view and disable edit and delete buttons, and reset search bar
|
||||||
|
displayPets();
|
||||||
|
btnDelete.setDisable(true);
|
||||||
|
btnEdit.setDisable(true);
|
||||||
|
txtSearch.setText("");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,203 @@
|
|||||||
|
package org.example.petshopdesktop.controllers.dialogcontrollers;
|
||||||
|
|
||||||
|
import javafx.collections.FXCollections;
|
||||||
|
import javafx.collections.ObservableList;
|
||||||
|
import javafx.event.EventHandler;
|
||||||
|
import javafx.fxml.FXML;
|
||||||
|
import javafx.scene.Node;
|
||||||
|
import javafx.scene.control.*;
|
||||||
|
import javafx.scene.input.MouseEvent;
|
||||||
|
import javafx.stage.Stage;
|
||||||
|
import org.example.petshopdesktop.DTOs.ProductDTO;
|
||||||
|
import org.example.petshopdesktop.Validator;
|
||||||
|
import org.example.petshopdesktop.database.PetDB;
|
||||||
|
import org.example.petshopdesktop.models.Category;
|
||||||
|
import org.example.petshopdesktop.models.Pet;
|
||||||
|
|
||||||
|
import java.sql.SQLException;
|
||||||
|
|
||||||
|
public class PetDialogController {
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private Button btnCancel;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private Button btnSave;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private ComboBox<String> cbPetStatus;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private Label lblMode;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private Label lblPetId;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private TextField txtPetAge;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private TextField txtPetBreed;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private TextField txtPetName;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private TextField txtPetPrice;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private TextField txtPetSpecies;
|
||||||
|
|
||||||
|
private String mode = null;
|
||||||
|
|
||||||
|
private ObservableList<String> statusList = FXCollections.observableArrayList(
|
||||||
|
"Available", "Adopted"
|
||||||
|
);
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
void initialize() {
|
||||||
|
|
||||||
|
cbPetStatus.setItems(statusList); //set status combobox
|
||||||
|
|
||||||
|
//Set up mouse handlers for buttons
|
||||||
|
btnSave.setOnMouseClicked(new EventHandler<MouseEvent>() {
|
||||||
|
@Override
|
||||||
|
public void handle(MouseEvent mouseEvent) {
|
||||||
|
buttonSaveClicked(mouseEvent);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
btnCancel.setOnMouseClicked(new EventHandler<MouseEvent>() {
|
||||||
|
@Override
|
||||||
|
public void handle(MouseEvent mouseEvent) {
|
||||||
|
closeStage(mouseEvent);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private void buttonSaveClicked(MouseEvent mouseEvent) {
|
||||||
|
int numRow = 0;
|
||||||
|
String errorMsg = "";
|
||||||
|
|
||||||
|
//Check validation (input required)
|
||||||
|
errorMsg += Validator.isPresent(txtPetName.getText(), "Pet Name");
|
||||||
|
errorMsg += Validator.isPresent(txtPetAge.getText(), "Age");
|
||||||
|
errorMsg += Validator.isPresent(txtPetBreed.getText(), "Breed");
|
||||||
|
errorMsg += Validator.isPresent(txtPetSpecies.getText(), "Species");
|
||||||
|
errorMsg += Validator.isPresent(txtPetPrice.getText(), "Price");
|
||||||
|
if (cbPetStatus.getSelectionModel().getSelectedItem() == null){
|
||||||
|
errorMsg += "Status is required";
|
||||||
|
}
|
||||||
|
|
||||||
|
//Check validation (length size)
|
||||||
|
errorMsg += Validator.isLessThanVarChars(txtPetName.getText(), "Pet Name", 50);
|
||||||
|
errorMsg += Validator.isLessThanVarChars(txtPetSpecies.getText(), "Species", 50);
|
||||||
|
errorMsg += Validator.isLessThanVarChars(txtPetBreed.getText(), "Breed", 50);
|
||||||
|
errorMsg += Validator.isLessThanVarChars(txtPetPrice.getText(), "Price", 12);
|
||||||
|
errorMsg += Validator.isLessThanVarChars(txtPetAge.getText(), "Age", 11);
|
||||||
|
|
||||||
|
//Check validation (format)
|
||||||
|
errorMsg += Validator.isNonNegativeDouble(txtPetPrice.getText(), "Price");
|
||||||
|
errorMsg += Validator.isNonNegativeInteger(txtPetAge.getText(), "Age");
|
||||||
|
|
||||||
|
if(errorMsg.isEmpty()){
|
||||||
|
Pet pet = collectPet();
|
||||||
|
if(mode.equals("Add")) {
|
||||||
|
try{
|
||||||
|
numRow = PetDB.insertPet(pet);
|
||||||
|
}
|
||||||
|
catch (SQLException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
try {
|
||||||
|
numRow = PetDB.updatePet(pet.getPetId(), pet);
|
||||||
|
}
|
||||||
|
catch (SQLException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//if no rows were affected then there was an error (prompt user of error)
|
||||||
|
if (numRow == 0){
|
||||||
|
Alert alert = new Alert(Alert.AlertType.ERROR);
|
||||||
|
alert.setHeaderText("Database Operation Error");
|
||||||
|
alert.setContentText(mode + " failed");
|
||||||
|
alert.showAndWait();
|
||||||
|
closeStage(mouseEvent);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
//tell the user operation was successful
|
||||||
|
Alert alert = new Alert(Alert.AlertType.CONFIRMATION);
|
||||||
|
alert.setHeaderText("Database Operation Confirmed");
|
||||||
|
alert.setContentText(mode + " succeeded");
|
||||||
|
alert.showAndWait();
|
||||||
|
closeStage(mouseEvent);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
Alert alert = new Alert(Alert.AlertType.ERROR);
|
||||||
|
alert.setHeaderText("Input Error");
|
||||||
|
alert.setContentText(errorMsg);
|
||||||
|
alert.showAndWait();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private Pet collectPet() {
|
||||||
|
int petId =0;
|
||||||
|
Pet pet = null;
|
||||||
|
|
||||||
|
if(lblPetId.isVisible()){
|
||||||
|
petId = Integer.parseInt(lblPetId.getText().split(": ")[1]);
|
||||||
|
}
|
||||||
|
pet = new Pet(
|
||||||
|
petId,
|
||||||
|
txtPetName.getText(),
|
||||||
|
txtPetSpecies.getText(),
|
||||||
|
txtPetBreed.getText(),
|
||||||
|
Integer.parseInt(txtPetAge.getText()),
|
||||||
|
cbPetStatus.getValue(),
|
||||||
|
Double.parseDouble(txtPetPrice.getText())
|
||||||
|
);
|
||||||
|
return pet;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void closeStage(MouseEvent mouseEvent) {
|
||||||
|
Node node = (Node) mouseEvent.getSource();
|
||||||
|
Stage stage = (Stage) node.getScene().getWindow();
|
||||||
|
stage.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void displayPetDetails(Pet pet){
|
||||||
|
if (pet!=null){
|
||||||
|
lblPetId.setText("ID: " + pet.getPetId());
|
||||||
|
txtPetName.setText(pet.getPetName());
|
||||||
|
txtPetSpecies.setText(pet.getPetSpecies());
|
||||||
|
txtPetBreed.setText(pet.getPetBreed());
|
||||||
|
txtPetAge.setText(pet.getPetAge() + "");
|
||||||
|
txtPetPrice.setText(pet.getPetPrice() + "");
|
||||||
|
|
||||||
|
//get the right combobox selection
|
||||||
|
for (String status : cbPetStatus.getItems()) {
|
||||||
|
if(status.equals(pet.getPetStatus())){
|
||||||
|
cbPetStatus.getSelectionModel().select(status);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMode(String mode) {
|
||||||
|
this.mode = mode;
|
||||||
|
lblMode.setText(mode + " Pet");
|
||||||
|
if(mode.equals("Add")) {
|
||||||
|
lblPetId.setVisible(false);
|
||||||
|
}
|
||||||
|
else if(mode.equals("Edit")) {
|
||||||
|
lblPetId.setVisible(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
145
src/main/java/org/example/petshopdesktop/database/PetDB.java
Normal file
145
src/main/java/org/example/petshopdesktop/database/PetDB.java
Normal file
@@ -0,0 +1,145 @@
|
|||||||
|
package org.example.petshopdesktop.database;
|
||||||
|
|
||||||
|
import javafx.collections.FXCollections;
|
||||||
|
import javafx.collections.ObservableList;
|
||||||
|
import org.example.petshopdesktop.models.Pet;
|
||||||
|
|
||||||
|
import java.sql.*;
|
||||||
|
|
||||||
|
public class PetDB {
|
||||||
|
public static ObservableList<Pet> getPets() throws SQLException {
|
||||||
|
//Connect to the database
|
||||||
|
ObservableList<Pet> pets = FXCollections.observableArrayList();
|
||||||
|
Connection conn = ConnectionDB.getConnection();
|
||||||
|
|
||||||
|
//Execute Query
|
||||||
|
Statement stmt = conn.createStatement();
|
||||||
|
ResultSet rs = stmt.executeQuery("SELECT * FROM pet");
|
||||||
|
|
||||||
|
//While there is still data add pets to the list
|
||||||
|
while(rs.next()){
|
||||||
|
Pet pet = new Pet(
|
||||||
|
rs.getInt(1),
|
||||||
|
rs.getString(2),
|
||||||
|
rs.getString(3),
|
||||||
|
rs.getString(4),
|
||||||
|
rs.getInt(5),
|
||||||
|
rs.getString(6),
|
||||||
|
rs.getDouble(7)
|
||||||
|
);
|
||||||
|
pets.add(pet);
|
||||||
|
}
|
||||||
|
|
||||||
|
//close connection and return pets
|
||||||
|
conn.close();
|
||||||
|
return pets;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ObservableList<Pet> getFilteredPets(String filter) throws SQLException {
|
||||||
|
//Connect to the database
|
||||||
|
ObservableList<Pet> pets = FXCollections.observableArrayList();
|
||||||
|
Connection conn = ConnectionDB.getConnection();
|
||||||
|
|
||||||
|
//Get SQL query for filtered word
|
||||||
|
String sql = "SELECT * FROM pet " +
|
||||||
|
" WHERE " +
|
||||||
|
"petName LIKE ? OR " +
|
||||||
|
"petSpecies LIKE ? OR " +
|
||||||
|
"petBreed LIKE ? OR " +
|
||||||
|
"petAge LIKE ? OR " +
|
||||||
|
"petStatus LIKE ? OR " +
|
||||||
|
"petPrice LIKE ?";
|
||||||
|
|
||||||
|
String filteredString = "%" + filter + "%";
|
||||||
|
|
||||||
|
PreparedStatement stmt = conn.prepareStatement(sql);
|
||||||
|
stmt.setString(1, filteredString);
|
||||||
|
stmt.setString(2, filteredString);
|
||||||
|
stmt.setString(3, filteredString);
|
||||||
|
stmt.setString(4, filteredString);
|
||||||
|
stmt.setString(5, filteredString);
|
||||||
|
stmt.setString(6, filteredString);
|
||||||
|
|
||||||
|
ResultSet rs = stmt.executeQuery();
|
||||||
|
|
||||||
|
while(rs.next()){
|
||||||
|
Pet pet = new Pet(
|
||||||
|
rs.getInt(1),
|
||||||
|
rs.getString(2),
|
||||||
|
rs.getString(3),
|
||||||
|
rs.getString(4),
|
||||||
|
rs.getInt(5),
|
||||||
|
rs.getString(6),
|
||||||
|
rs.getDouble(7)
|
||||||
|
);
|
||||||
|
pets.add(pet);
|
||||||
|
}
|
||||||
|
|
||||||
|
conn.close();
|
||||||
|
return pets;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int insertPet(Pet pet) throws SQLException {
|
||||||
|
int numRows = 0;
|
||||||
|
|
||||||
|
Connection conn = ConnectionDB.getConnection();
|
||||||
|
String sql = "INSERT INTO pet (petId, petName, petSpecies, petBreed, petAge, petStatus, petPrice)" +
|
||||||
|
" VALUES (?, ?, ?, ?, ?, ?, ?)";
|
||||||
|
|
||||||
|
PreparedStatement stmt = conn.prepareStatement(sql);
|
||||||
|
stmt.setInt(1, pet.getPetId());
|
||||||
|
stmt.setString(2, pet.getPetName());
|
||||||
|
stmt.setString(3, pet.getPetSpecies());
|
||||||
|
stmt.setString(4, pet.getPetBreed());
|
||||||
|
stmt.setInt(5, pet.getPetAge());
|
||||||
|
stmt.setString(6, pet.getPetStatus());
|
||||||
|
stmt.setDouble(7, pet.getPetPrice());
|
||||||
|
|
||||||
|
numRows = stmt.executeUpdate();
|
||||||
|
conn.close();
|
||||||
|
|
||||||
|
return numRows;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int updatePet(int petId, Pet pet) throws SQLException {
|
||||||
|
int numRows = 0;
|
||||||
|
|
||||||
|
Connection conn = ConnectionDB.getConnection();
|
||||||
|
String sql = "UPDATE pet SET " +
|
||||||
|
" petName = ?, " +
|
||||||
|
" petSpecies = ?, " +
|
||||||
|
" petBreed = ?, " +
|
||||||
|
" petAge = ?, " +
|
||||||
|
" petStatus = ?, " +
|
||||||
|
" petPrice = ? " +
|
||||||
|
" WHERE petId = ?";
|
||||||
|
PreparedStatement stmt = conn.prepareStatement(sql);
|
||||||
|
stmt.setString(1, pet.getPetName());
|
||||||
|
stmt.setString(2, pet.getPetSpecies());
|
||||||
|
stmt.setString(3, pet.getPetBreed());
|
||||||
|
stmt.setInt(4, pet.getPetAge());
|
||||||
|
stmt.setString(5, pet.getPetStatus());
|
||||||
|
stmt.setDouble(6, pet.getPetPrice());
|
||||||
|
stmt.setInt(7, petId);
|
||||||
|
|
||||||
|
numRows = stmt.executeUpdate();
|
||||||
|
conn.close();
|
||||||
|
|
||||||
|
return numRows;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int deletePet(int petId) throws SQLException {
|
||||||
|
int numRows = 0;
|
||||||
|
Connection conn = ConnectionDB.getConnection();
|
||||||
|
|
||||||
|
String sql = "DELETE FROM pet WHERE petId = ?";
|
||||||
|
PreparedStatement stmt = conn.prepareStatement(sql);
|
||||||
|
|
||||||
|
stmt.setInt(1, petId);
|
||||||
|
|
||||||
|
numRows = stmt.executeUpdate();
|
||||||
|
conn.close();
|
||||||
|
|
||||||
|
return numRows;
|
||||||
|
}
|
||||||
|
}
|
||||||
109
src/main/java/org/example/petshopdesktop/models/Pet.java
Normal file
109
src/main/java/org/example/petshopdesktop/models/Pet.java
Normal file
@@ -0,0 +1,109 @@
|
|||||||
|
package org.example.petshopdesktop.models;
|
||||||
|
|
||||||
|
import javafx.beans.property.SimpleDoubleProperty;
|
||||||
|
import javafx.beans.property.SimpleIntegerProperty;
|
||||||
|
import javafx.beans.property.SimpleStringProperty;
|
||||||
|
|
||||||
|
public class Pet {
|
||||||
|
private SimpleIntegerProperty petId;
|
||||||
|
private SimpleStringProperty petName;
|
||||||
|
private SimpleStringProperty petSpecies;
|
||||||
|
private SimpleStringProperty petBreed;
|
||||||
|
private SimpleIntegerProperty petAge;
|
||||||
|
private SimpleStringProperty petStatus;
|
||||||
|
private SimpleDoubleProperty petPrice;
|
||||||
|
|
||||||
|
public Pet(int petId, String petName, String petSpecies, String petBreed, int petAge, String petStatus, double petPrice) {
|
||||||
|
this.petId = new SimpleIntegerProperty(petId);
|
||||||
|
this.petName = new SimpleStringProperty(petName);
|
||||||
|
this.petSpecies = new SimpleStringProperty(petSpecies);
|
||||||
|
this.petBreed = new SimpleStringProperty(petBreed);
|
||||||
|
this.petAge = new SimpleIntegerProperty(petAge);
|
||||||
|
this.petStatus = new SimpleStringProperty(petStatus);
|
||||||
|
this.petPrice = new SimpleDoubleProperty(petPrice);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getPetId() {
|
||||||
|
return petId.get();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPetId(int petId) {
|
||||||
|
this.petId.set(petId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public SimpleIntegerProperty petIdProperty() {
|
||||||
|
return petId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPetName() {
|
||||||
|
return petName.get();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPetName(String petName) {
|
||||||
|
this.petName.set(petName);
|
||||||
|
}
|
||||||
|
|
||||||
|
public SimpleStringProperty petNameProperty() {
|
||||||
|
return petName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPetSpecies() {
|
||||||
|
return petSpecies.get();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPetSpecies(String petSpecies) {
|
||||||
|
this.petSpecies.set(petSpecies);
|
||||||
|
}
|
||||||
|
|
||||||
|
public SimpleStringProperty petSpeciesProperty() {
|
||||||
|
return petSpecies;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPetBreed() {
|
||||||
|
return petBreed.get();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPetBreed(String petBreed) {
|
||||||
|
this.petBreed.set(petBreed);
|
||||||
|
}
|
||||||
|
|
||||||
|
public SimpleStringProperty petBreedProperty() {
|
||||||
|
return petBreed;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getPetAge() {
|
||||||
|
return petAge.get();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPetAge(int petAge) {
|
||||||
|
this.petAge.set(petAge);
|
||||||
|
}
|
||||||
|
|
||||||
|
public SimpleIntegerProperty petAgeProperty() {
|
||||||
|
return petAge;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPetStatus() {
|
||||||
|
return petStatus.get();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPetStatus(String petStatus) {
|
||||||
|
this.petStatus.set(petStatus);
|
||||||
|
}
|
||||||
|
|
||||||
|
public SimpleStringProperty petStatusProperty() {
|
||||||
|
return petStatus;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getPetPrice() {
|
||||||
|
return petPrice.get();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPetPrice(double petPrice) {
|
||||||
|
this.petPrice.set(petPrice);
|
||||||
|
}
|
||||||
|
|
||||||
|
public SimpleDoubleProperty petPriceProperty() {
|
||||||
|
return petPrice;
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user