From fbd9119756d1c520bcc1f325e70888df3f77c455 Mon Sep 17 00:00:00 2001 From: CAMOPKAH Date: Fri, 21 Feb 2020 10:19:01 +0300 Subject: [PATCH] Bimaev Oleg --- task2/src/main/java/DBUtility.java | 112 +++++++++++++++++++++++++---- 1 file changed, 97 insertions(+), 15 deletions(-) diff --git a/task2/src/main/java/DBUtility.java b/task2/src/main/java/DBUtility.java index 0e67b06..40f4fea 100644 --- a/task2/src/main/java/DBUtility.java +++ b/task2/src/main/java/DBUtility.java @@ -18,13 +18,55 @@ public class DBUtility { */ - void AddPrinters(Statement stmt){ - // TODO: 16.12.2019 + void AddPrinters(Statement stmt) { + //Предзаполняем массив с принтерами + ArrayList PrinterMass = new ArrayList<>(); + + PrinterMass.add(new Printer(1012,"HP", "col", "lase", 20000)); + PrinterMass.add(new Printer(1010,"Canon", "bw", "jet", 5000)); + PrinterMass.add(new Printer(1010,"Canon", "bw", "jet", 5000)); + + try { + //Генирируем SQL Batch для вставки принтеров + for (Printer pM : PrinterMass) { + + stmt.addBatch("INSERT INTO Printer ( model, maker, color, type, price)" + + "VALUES ( ' " + pM.getModel() + " ','" + pM.getMaker() + "','" + pM.getColor() + "','" + pM.getType() + "','" + pM.getPrice() + "');"); + + + } + //Выполняем предзаполненый список запросов + stmt.executeBatch(); + } catch (SQLException e) { + e.printStackTrace(); + } + + /* При каждой вставке происходит выполнение тригера product_BI + CREATE TRIGGER product_BI BEFORE INSERT ON Product FOR EACH ROW BEGIN INSERT INTO Product ( maker, model,type) VALUES (new.maker, + new.model, + 'Printer' + ); +END; + + + */ } - public void createPrinterTable(Connection con, Statement stmt){ - // TODO: 16.12.2019 + public void createPrinterTable(Connection con, Statement stmt) { + + try { + stmt.addBatch("CREATE TABLE IF NOT EXISTS Printer (id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE " + + ", model INTEGER, maker TEXT, color TEXT, type TEXT, price INTEGER);"); + stmt.addBatch("CREATE TRIGGER IF NOT EXISTS product_BI BEFORE INSERT ON Product FOR EACH ROW BEGIN INSERT INTO Product ( maker, model,type) VALUES (new.maker, new.model, 'Printer');"); + //Выполняем предзаполненый список запросов + stmt.executeBatch(); + } catch (SQLException e) { + e.printStackTrace(); + } + AddPrinters(stmt); + + } /* @@ -32,8 +74,19 @@ public void createPrinterTable(Connection con, Statement stmt){ */ public ArrayList selectExpensivePC(Statement stmt){ - //todo - return null; + ArrayList Result = new ArrayList<>(); + try { + //Запрос + ResultSet rSet = stmt.executeQuery("SELECT DISTINCT model FROM PC WHERE PRICE > 15000"); + //Перебираем результат + while (rSet.next()) { + Result.add(rSet.getString("model")); + } + } catch (SQLException e) { + e.printStackTrace(); + } + return Result; + } /* @@ -41,19 +94,38 @@ public ArrayList selectExpensivePC(Statement stmt){ * которых выше чем 2500 */ - public ArrayList selectQuickLaptop(Statement stmt) { - // TODO: 16.12.2019 - return null; + public ArrayList selectQuickLaptop(Statement stmt) { + ArrayList Result = new ArrayList<>(); + try { + //Запрос + ResultSet rSet = stmt.executeQuery("SELECT id FROM PC WHERE speed > 2500;"); + //Перебираем результат + while (rSet.next()) { + Result.add(rSet.getInt ("id")); + } + } catch (SQLException e) { + e.printStackTrace(); + } + return Result; } /* * Метод должен вернуть список производителей которые * делают и пк и ноутбуки */ - public ArrayList selectMaker(Statement stmt){ - ArrayList ans = new ArrayList<>(); - // TODO: 18.02.2020 - return ans; + public ArrayList selectMaker(Statement stmt) { + ArrayList Result = new ArrayList<>(); + try { + //Запрос + ResultSet rSet = stmt.executeQuery("SELECT maker, COUNT() FROM (SELECT DISTINCT maker, type FROM Product WHERE type in ('Laptop', 'PC') ) GROUP BY maker HAVING COUNT()>1;"); + //Перебираем результат + while (rSet.next()) { + Result.add(rSet.getString("maker")); + } + } catch (SQLException e) { + e.printStackTrace(); + } + return Result; } /* @@ -65,9 +137,19 @@ public ArrayList selectMaker(Statement stmt){ * или сделать любым другим способом */ - public int makerWithMaxProceeds(Statement stmt){ + public int makerWithMaxProceeds(Statement stmt) { int result = 0; - //todo + try { + ResultSet rSet = stmt.executeQuery("SELECT p.maker,SUM(A_mod.price) M_SUM FROM (SELECT model, price FROM PC UNION ALL SELECT model, price FROM Laptop) A_mod, (SELECT DISTINCT * FROM product pp) p WHERE p.model=A_mod.model GROUP BY p.maker ORDER BY 2 DESC;"); + //Перебираем результат + while (rSet.next()) { + result = rSet.getInt ("M_SUM"); + break; + } + } catch (SQLException e) { + e.printStackTrace(); + } + return result; }