Problemy na początku kariery z Javą

0

Witam,
Studiuję informatykę i od kilku miesięcy walczę w projektem na Języki i Paradygmaty Programowania, który polega na stworzeniu sklepu internetowego. Bardzo nie podoba mi się sposób prowadzenia zajęć przez prowadzącego, z których nic nie umiem wynieść, a jak zadam jakiekolwiek pytanie to od razu zostaję posądzony o to, że nie uważam i/lub nie słucham i/lub studia informatyczne są nie dla wszystkich. Robiłem każdy eta projektu zgodnie z zaleceniami prowadzącego, ale teraz mam mały problem. Będę wdzięczny za pomoc.

Projekt sklepu opiera się o klasy Item, BasketItem, Basket. Pierwsza jest zbiorem informacji o produktach, druga przechowuje dostęp do tych informacji wraz z wiadomością ile chcę dodać rzeczy do koszyka, a sam Basket to ArrayLista przechowująca ItemBaskety - jako info o produkcie i jego ilość. Z tych informacji łatwo wyciągnąć wartość całego zamówienia. Na poziomie konsolowym wszystko śmiga ( albo przynajmniej ja tak myślę, a prowadzący przy sprawdzaniu to potwierdził ). Po zamodelowaniu całej aplikacji i implementacji konsolowej oczekiwał od nas podłączenia bazy danych ( co mi się wydaje, że jest dość późnym krokiem, bo do tej pory operowaliśmy tylko na pamięci tymczasowej ). Z tym etapem również sobie poradziłem ( bazy są dla mnie dużo łatwiejsze i przyjemniejsze niż Java ), więc poprzez zwykłe połączenia z bazą i inserty przesyłam tam informacje o przedmiotach, ale jeżeli dobrze rozumiem to w samej aplikacji instancje klasy Item się nie tworzą. Do momentu samego wysłania obiektu do bazy było spoko, ale ja chciałbym teraz na nich operować. Przy dodawaniu do sklepu powienem tworzyć nowe obiekty lasy Item na potrzebę chwili, żeby dodać do koszyka? Ogólnie żeby coś dodać do koszyka to potrzebuję nazwę przedmiotu i jego ilość. Tworząc przedmiot do bazy danych, nie wiem jak się do niego później odwołać. Bo konsolowo tworzyłem jego nazwę to go znalem i umiałem się do niego odwołać, a co sytuacji, gdy nie znam nazwy przedmiotu?

public class Item {

    private int itemID = 0;
    static int nastepneID = 1;
    private String itemName;
    private double itemPrice;
    private String itemDescription;
    private byte[]pic;

    public Item(String itemName, double itemPrice, String itemDescription){
        itemID = nastepneID;
        nastepneID++;
        this.itemName = itemName;
        this.itemPrice = itemPrice;
        this.itemDescription= itemDescription;
    }

    public Item(int itemID, String itemName, double itemPrice, String itemDescription ){
        this.itemID = itemID;
        this.itemName = itemName;
        this.itemPrice = itemPrice;
        this.itemDescription= itemDescription;

    }

    public int getItemID(){
        return itemID;
    } 

    public String getItemName(){
        return itemName;
    }

    public double getItemPrice(){
        return itemPrice;
    }

    public String getItemDescription() {
        return itemDescription;
    }

}

public class BasketItem{

    private Item itemInfo; 
    private int quantity;

    public BasketItem() {       
        this.quantity = 0;
    }

    public BasketItem(BasketItem basketItem) {
        this.itemInfo = basketItem.itemInfo;
        this.quantity = basketItem.quantity;
    }

    public Item getItemInfo() {
        return itemInfo;
    }
    public void setProduct(Item itemInfo) {
        this.itemInfo = itemInfo;
    }

    public int getQuantity() {
        return quantity;
    }

    public void setQuantity(int quantity) {
        this.quantity = quantity;
    }

    public double getAmount() {
        return this.itemInfo.getItemPrice() * this.quantity;
    }

}

public class Basket {

    public static ArrayList<BasketItem> basketItem = new ArrayList();

    Basket (){
    }

    Basket( Basket basket){
        this.basketID = basket.getBasketID();
        this.basketItem = basket.getBasketItem();
    }

    public int getBasketID() {
        return basketID;
    }

    public void setBasketId(int basketID) {
        this.basketID = basketID;
    }

    public ArrayList<BasketItem> getBasketItem() {
        return this.basketItem;
    }

    public void setBasketItem(ArrayList <BasketItem> basketItem) {
        this.basketItem = basketItem;
    }

        private BasketItem findItemByID(int id) {
        for (BasketItem item : this.basketItem) {
            if (item.getItemInfo().getItemID() == id) {
                return item;
            }
        }
        return null;
    }
        public void addItem(Item product, int quantity) { 
        BasketItem item = this.findItemByID(product.getItemID());

        if (item == null) {
            item = new BasketItem();
            item.setQuantity(0);
            item.setProduct(product);
            this.basketItem.add(item);
        }
        int newQuantity = item.getQuantity() + quantity;
        if (newQuantity <= 0) {// zabezpieczenie przed idiotami
            this.basketItem.remove(item);           
        } else {
            item.setQuantity(newQuantity);
        }

    }

         public void removeItem(Item product) {
        BasketItem item = this.findItemByID(product.getItemID()); 
        if(item != null) {
            this.basketItem.remove(item);
        }
    }   

    public void updateItem(int itemID, int quantity) {
        BasketItem line = this.findItemByID(itemID);

        if (line != null) {
            if (quantity <= 0) {
                this.basketItem.remove(line);
            } else {
                line.setQuantity(quantity);
            }
        }
    }

    public double getAmountTotal() {
        double total = 0;
        for (BasketItem line : this.basketItem) {
            total += line.getAmount();
        }
        return total;
    }

}

Sam INSERT do bazy wygląda następująco:

private void Btn_InsertActionPerformed(java.awt.event.ActionEvent evt) {                                           
        if(checkInputs()){
            try{
            Connection con = dbConnection();
             PreparedStatement ps = con.prepareStatement("INSERT INTO item(productName,productPrice,productDescription)"
                        + "values(?,?,?) ");
             ps.setString(1, txt_name.getText());
             ps.setString(2, txt_price.getText());
             ps.setString(3, txt_description.getText());

             ps.executeUpdate();
             Show_Products_In_JTable();

                 JOptionPane.showMessageDialog(null, "Data Inserted");
            } catch (Exception ex) {
                 JOptionPane.showMessageDialog(null, ex.getMessage());
            }
        }else {
        JOptionPane.showMessageDialog(null, "Jedno lub więcej pól pozostało puste");
        }

Będę wdzięczny za pomoc!

1
  1. Lekcja na dzis: Map. Bo to wyszukiwanie obiektów w tablicy poprzez iteracje woła o pomstę do nieba. Jak miałbyś miliard produktów to też przelgądałbyś wszystkie za każdym razem zeby znaleźć ten pasujący?
  2. Ten static z next id to masakra. Zmień te ID na jakieś UUID i nie kombinuj.
  3. Nie twórz połączenia do DB za każdym razem. Zrób je raz i zapamiętaj.
  4. Zrób osobną klasę która obsługuje operacje na tym datastore, a nie wpychaj takiej logiki do handlera po kliknięciu buttona
  5. Nie bardzo rozumiem czemu nie tworzysz instancji tych obiektów teraz. Insert do bazy to jest kwestia persystencji, jak aplikacja się wywali to po starcie załadujesz poprzedni stan koszyka. Ale sama aplikacja powinna działać na obiektach w pamięci, a nie czytać non stop z bazy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0