Итак, наш лектор дал нам пример кода 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;
}