JavaFX Persistance Layer - удаление retrieve () и persist () и добавление приложения CRUD с файлом данных - PullRequest
0 голосов
/ 01 апреля 2020

Итак, наш лектор дал нам пример кода JavaFX с использованием соединения DATABASE, и он дал нам этот оригинальный код на уровне постоянства:

public List<FoodItem> retrieve() {
        List<FoodItem> foodItems = new ArrayList<>();
        FoodItem foodItem = null;

        try {
            this.dataPersistenceLayer = DriverManager.getConnection(DB_CONNECTION, connectionProperties);

            Statement sql = this.dataPersistenceLayer.createStatement();
            ResultSet records = sql.executeQuery("SELECT * FROM SHOPPING.FOODITEM");
            while (records.next()) {
                foodItem = new FoodItem();
                foodItem.setID(records.getInt("ID"));
                foodItem.setName(records.getString("Name"));
                foodItem.setPrice(records.getFloat("Price"));
                foodItems.add(foodItem);
            }
        } catch (SQLException sqlex) {
            System.out.println ("Database read error");
            System.out.println(sqlex);
        } 
        return foodItems;
    }

    public void persist(List<FoodItem> foodItems) {
        FoodItem foodItem = null;
        try {
            this.dataPersistenceLayer = DriverManager.getConnection(DB_CONNECTION, connectionProperties);
            Statement sql = this.dataPersistenceLayer.createStatement();
            sql.execute("TRUNCATE TABLE SHOPPING.FOODITEM");
            for (int i =0; i < foodItems.size(); i++) {
                foodItem = foodItems.get(i);
                sql.executeUpdate("INSERT INTO SHOPPING.FOODITEM (ID, NAME, PRICE) VALUES ("
                        + foodItem.getID() + ", '"
                        + foodItem.getName() + "', "
                        + foodItem.getPrice() + ")");
            }
        } catch (SQLException sqlex) {
            System.out.println ("Database write error");
            System.out.println(sqlex);
        }
    }
}

Затем он дал нам этот обновленный код для уровня постоянства. :

 public FoodItem read(int id) {

        FoodItem foodItem = null;

        try {
            this.dataPersistenceLayer = DriverManager.getConnection(DB_CONNECTION, connectionProperties);

            Statement sql = this.dataPersistenceLayer.createStatement();
            ResultSet records = sql.executeQuery("SELECT * FROM SHOPPING.FOODITEM WHERE ID="+id);
            while (records.next()) {
                foodItem = new FoodItem();
                foodItem.setID(records.getInt("ID"));
                foodItem.setName(records.getString("Name"));
                foodItem.setPrice(records.getFloat("Price"));
            }
        } catch (SQLException sqlex) {
            System.out.println ("Database read error");
            System.out.println(sqlex);
        } 
        return foodItem;

    }

    public List<FoodItem> readAll() {
        List<FoodItem> foodItems = new ArrayList<>();
        FoodItem foodItem = null;

        try {
            this.dataPersistenceLayer = DriverManager.getConnection(DB_CONNECTION, connectionProperties);

            Statement sql = this.dataPersistenceLayer.createStatement();
            ResultSet records = sql.executeQuery("SELECT * FROM SHOPPING.FOODITEM");
            while (records.next()) {
                foodItem = new FoodItem();
                foodItem.setID(records.getInt("ID"));
                foodItem.setName(records.getString("Name"));
                foodItem.setPrice(records.getFloat("Price"));
                foodItems.add(foodItem);
                lastRowId = foodItem.getID(); //Keep track of ID of last populated row
            }
        } catch (SQLException sqlex) {
            System.out.println ("Database read error");
            System.out.println(sqlex);
        } 
        return foodItems;
    }

    public FoodItem create(FoodItem foodItem) {
        try {
            this.dataPersistenceLayer = DriverManager.getConnection(DB_CONNECTION, connectionProperties);
            Statement sql = this.dataPersistenceLayer.createStatement();
            sql.executeUpdate("INSERT INTO SHOPPING.FOODITEM (ID, NAME, PRICE) VALUES ("
                        + ++lastRowId + ", '" //Id is going to be 1 greater than that of the Id in hte last row
                        + foodItem.getName() + "', "
                        + foodItem.getPrice() + ")");
            return new FoodItem(lastRowId, foodItem.getName(), foodItem.getPrice());
        } catch (SQLException sqlex) {
            System.out.println ("Database write error");
            System.out.println(sqlex);
            return null;
        }
    }

    public void update(FoodItem foodItem) {
        try {
            this.dataPersistenceLayer = DriverManager.getConnection(DB_CONNECTION, connectionProperties);
            Statement sql = this.dataPersistenceLayer.createStatement();
            sql.executeUpdate("UPDATE SHOPPING.FOODITEM SET NAME='"
                    + foodItem.getName() + "', PRICE="
                    + foodItem.getPrice() + " WHERE ID="
                    + foodItem.getID() + ")");
        } catch (SQLException sqlex) {
            System.out.println ("Database write error");
            System.out.println(sqlex);
        }
    }

    public void delete(FoodItem foodItem) {
        try {
            this.dataPersistenceLayer = DriverManager.getConnection(DB_CONNECTION, connectionProperties);
            Statement sql = this.dataPersistenceLayer.createStatement();
            sql.executeUpdate("DELETE FROM SHOPPING.FOODITEM WHERE ID="
                    + foodItem.getID() + ")");
        } catch (SQLException sqlex) {
            System.out.println ("Database write error");
            System.out.println(sqlex);
        }
    }
}

Теперь мы получили этот похожий код, но с использованием DATAFILE в слое постоянства:

@Override
    public List<FoodItem> retrieve() {
        List<FoodItem> foodItems = new ArrayList<>();

        try {
            InputStream inputStream = new FileInputStream(DATAFILE);
            ObjectInputStream objectStream = new ObjectInputStream(inputStream);
            foodItems = (List<FoodItem>)objectStream.readObject();
            System.out.println("retrieve:: " + foodItems.size() + " items found in file");
            objectStream.close();
        } catch (ClassNotFoundException | IOException ex) {
            System.out.println ("File or class not found");
            System.out.println (ex);
        } 
        return foodItems;
    }

    @Override
    public void persist(List<FoodItem> foodItems) {
        try {
            FileOutputStream outputStream = new FileOutputStream(DATAFILE, false);
            ObjectOutputStream objectStream = new ObjectOutputStream(outputStream);
            objectStream.writeObject(foodItems);
            System.out.println("persist:: " + foodItems.size() + " items written to file");
            objectStream.close();
        } catch (IOException ex) {
            System.out.println ("Output Error");
            System.out.println (ex);
        }
    }
}

И мы должны аналогично коду DATABASE исключить использование методы retrieve () и persist (), это то, что я сделал до сих пор, но я все еще получаю много ошибок. Пожалуйста, помогите!

 private static int lastRowId = -1;

    public FoodItem read(int id) {

        FoodItem foodItem = null;

        try {
            InputStream inputStream = new FileInputStream(DATAFILE);
            ObjectInputStream objectStream = new ObjectInputStream(inputStream);
            foodItem = (List<FoodItem>)objectStream.readObject();
            System.out.println("retrieve:: " + foodItem.size() + " items found in file");
            objectStream.close();
        } catch (ClassNotFoundException | IOException ex) {
            System.out.println ("File or class not found");
            System.out.println (ex);
        } 
        return foodItem;
    }

    public List<FoodItem> readAll() {
        List<FoodItem> foodItems = new ArrayList<>();
        FoodItem foodItem = null;

        try{
           InputStream inputStream = new FileInputStream(DATAFILE);
           ObjectInputStream objectStream = new ObjectInputStream(inputStream);
           foodItem = (List<FoodItem>)objectStream.readObject();
           System.out.println("retrieve:: " + foodItem.size() + " items found in file");
           objectStream.close();
        } catch (ClassNotFoundException | IOException ex) {
            System.out.println ("File or class not found");
            System.out.println (ex);
        } 
        return foodItem;

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