From b9638a0b67b90e9744d91da2a4e3e2f7c993358e Mon Sep 17 00:00:00 2001 From: pavlyuklybov Date: Mon, 21 Oct 2019 17:38:04 +0300 Subject: [PATCH 1/3] =?UTF-8?q?=D0=A0=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=20=D0=B4=D0=BE=D0=BF.=20=D0=BA=D0=BB=D0=B0?= =?UTF-8?q?=D1=81=D1=81=20=20Users=20=D0=B4=D0=BB=D1=8F=20=D1=85=D1=80?= =?UTF-8?q?=D0=B0=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BF=D0=BE=D0=BB=D1=83?= =?UTF-8?q?=D1=87=D0=B5=D0=BD=D0=BD=D1=8B=D1=85=20=D0=B8=D0=B7=20=D0=B1?= =?UTF-8?q?=D0=B0=D0=B7=D1=8B=20=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2?= =?UTF-8?q?=D0=B0=D1=82=D0=B5=D0=BB=D0=B5=D0=B9,=20=D0=B0=20=D1=82=D0=B0?= =?UTF-8?q?=D0=BA=D0=B6=D0=B5=20=D0=B2=D1=8B=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8=D1=8F=20?= =?UTF-8?q?=D0=BF=D0=BE=20=D0=BF=D0=BE=D0=BB=D1=83=D1=87=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D1=8E=20=D0=B4=D0=B0=D0=BD=D0=BD=D1=8B=D1=85=20=D0=B8=D0=B7=20?= =?UTF-8?q?=D0=B1=D0=B0=D0=B7=D1=8B=20=D0=B2=20MainJava.=20=D0=A2=D0=B0?= =?UTF-8?q?=D0=BA=D0=B6=D0=B5=20=D0=B2=D1=8B=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=BE=20=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8=D0=B5=20?= =?UTF-8?q?=D0=BF=D0=BE=20=D0=BD=D0=B0=D0=BF=D0=B8=D1=81=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D1=8E=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=D0=B0=20=D1=81=D1=80?= =?UTF-8?q?=D0=B0=D0=B2=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=B1=D0=B0=D0=B7?= =?UTF-8?q?=20=D0=B4=D0=B0=D0=BD=D0=BD=D1=8B=D1=85=20=D0=B1=D0=B5=D0=B7=20?= =?UTF-8?q?=D0=B8=D1=81=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F=20=D1=86=D0=B8=D0=BA=D0=BB=D0=BE=D0=B2=20?= =?UTF-8?q?=D0=B2=20=D0=BA=D0=BB=D0=B0=D1=81=D1=81=D0=B5=20CompDatabase.?= =?UTF-8?q?=20=D0=9A=D0=B0=D0=BA=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0?= =?UTF-8?q?=D0=B5=D1=82=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=20=D0=BC=D0=BE?= =?UTF-8?q?=D0=B6=D0=BD=D0=BE=20=D1=83=D0=B2=D0=B8=D0=B4=D0=B5=D1=82=D1=8C?= =?UTF-8?q?=20=D0=B2=20CompAppl.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ru/milandr/courses/pavlyuk/CompAppl.java | 12 +++ .../milandr/courses/pavlyuk/CompDatabase.java | 76 ++++++++++++++++ src/ru/milandr/courses/pavlyuk/MainJava.java | 88 +++++++++++++++++++ src/ru/milandr/courses/pavlyuk/User.java | 48 ++++++++++ 4 files changed, 224 insertions(+) create mode 100644 src/ru/milandr/courses/pavlyuk/CompAppl.java create mode 100644 src/ru/milandr/courses/pavlyuk/CompDatabase.java create mode 100644 src/ru/milandr/courses/pavlyuk/MainJava.java create mode 100644 src/ru/milandr/courses/pavlyuk/User.java diff --git a/src/ru/milandr/courses/pavlyuk/CompAppl.java b/src/ru/milandr/courses/pavlyuk/CompAppl.java new file mode 100644 index 0000000..91e860c --- /dev/null +++ b/src/ru/milandr/courses/pavlyuk/CompAppl.java @@ -0,0 +1,12 @@ +package ru.milandr.courses.pavlyuk; + +public class CompAppl { + public static void main(String[] args) { + boolean a = CompDatabase.compareData("jdbc:postgresql://localhost:5432/users_database", + "jdbc:postgresql://localhost:5432/users_database2", + "users", + "users", + "id,last_name"); + System.out.println(a); + } +} diff --git a/src/ru/milandr/courses/pavlyuk/CompDatabase.java b/src/ru/milandr/courses/pavlyuk/CompDatabase.java new file mode 100644 index 0000000..7d80a79 --- /dev/null +++ b/src/ru/milandr/courses/pavlyuk/CompDatabase.java @@ -0,0 +1,76 @@ +package ru.milandr.courses.pavlyuk; + + +import com.sun.prism.impl.Disposer; +import com.sun.xml.internal.ws.api.model.wsdl.WSDLOutput; + +import javax.swing.*; +import java.sql.*; + +import java.util.*; +import java.util.stream.IntStream; + +public class CompDatabase { + + + public static boolean compareData(String db1Link, String db2Link, String table1Name, + String table2Name, String columns) { + + HashMap> table1 = new HashMap<>(); + + HashMap> table2 = new HashMap<>(); + List requestedColumns = Arrays.asList(columns.split(",")); + + + requestedColumns.forEach(col -> { + table1.put(col, new ArrayList<>()); + table2.put(col, new ArrayList<>()); + }); + + try (Connection con = DriverManager.getConnection(db1Link, + "postgres", "postgres"); + Connection con2 = DriverManager.getConnection(db2Link, + "postgres", "postgres"); + Statement smt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, + ResultSet.CONCUR_UPDATABLE); + Statement smt2 = con2.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, + ResultSet.CONCUR_UPDATABLE)) { + Class.forName("org.postgresql.Driver"); + + ResultSet rs = smt.executeQuery("SELECT * FROM " + table1Name); + ResultSet rs2 = smt2.executeQuery("SELECT * FROM " + table2Name); + + rs.last(); + int numberOfRowsTable1 = rs.getRow(); + + rs2.last(); + int numberOfRowsTable2 = rs2.getRow(); + + if (numberOfRowsTable1 != numberOfRowsTable2) { + return false; + } + + IntStream stream = IntStream.range(1, numberOfRowsTable1); + stream.forEach(e -> requestedColumns.forEach(col -> { + try { + rs.absolute(e); + rs2.absolute(e); + table1.get(col).add(rs.getString(col)); + table2.get(col).add(rs2.getString(col)); + + } catch (SQLException ex) { + ex.printStackTrace(); + System.out.println("Введенные колонки не найдены"); + System.exit(0); + + } + })); + } catch (SQLException | ClassNotFoundException e) { + e.printStackTrace(); + + System.out.println("Проблема при работе с БД!"); + System.exit(0); + } + System.out.println(table2.toString()); + return (table1.equals(table2)); } +} diff --git a/src/ru/milandr/courses/pavlyuk/MainJava.java b/src/ru/milandr/courses/pavlyuk/MainJava.java new file mode 100644 index 0000000..f603818 --- /dev/null +++ b/src/ru/milandr/courses/pavlyuk/MainJava.java @@ -0,0 +1,88 @@ +package ru.milandr.courses.pavlyuk; + +import java.sql.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; +import java.util.stream.Collectors; + +public class MainJava { + public static void main(String[] args) { + + List Users = new ArrayList<>(); + List AnteRoadUsers = new ArrayList<>(); + Double averageAddress; + String addressWithoutUser = null; + + try (Connection con = DriverManager.getConnection("jdbc:postgresql://localhost:5432/users_database", + "postgres", "postgres"); + Statement smt = con.createStatement()) { + Class.forName("org.postgresql.Driver"); + + // 1. Найти средствами джавы (!) пользователя с наибольшим id. + // Просто найти пользователя по условию id = 100 не будет считаться решением. + // Вывести всю информацию о нем в консоль. + + ResultSet rs = smt.executeQuery("SELECT * FROM users;"); + + while (rs.next()) { + User user = new User(rs.getInt("id"), rs.getString("first_name"), + rs.getString("last_name"), rs.getInt("address_id"), + rs.getString("phone_number")); + Users.add(user); + + } + + System.out.println(Collections.max(Users, Comparator.comparing(User::getId))); + + //2. Вывести всех пользователей, проживающих по адресу P.O. Box 677, 8665 Ante Road. + // Для того, чтобы это сделать необходимо самостоятельно освоить такую SQL-конструкцию как JOIN. + + rs = smt.executeQuery("SELECT *\n" + + "FROM users INNER JOIN addresses\n" + + "ON users.address_id = addresses.id\n" + + "WHERE address = 'P.O. Box 677, 8665 Ante Road';"); + + while (rs.next()) { + User userID = new User(rs.getInt("id"), rs.getString("first_name"), + rs.getString("last_name"), rs.getInt("address_id"), + rs.getString("phone_number")); + AnteRoadUsers.add(userID); + } + + System.out.println(AnteRoadUsers.toString()); + + //3. Вывести всех пользователей, отсортировав их средствами джавы (!) в алфавитном порядке по их фамилии. + + + Users.sort((Comparator.comparing(User::getLastName))); + System.out.println(Users.toString()); + + // 4. Найти средствами джавы (!) среднее значение почтового индекса, учитывая только числовые значения индекса. + + averageAddress = Users.stream().collect(Collectors.averagingDouble(User::getAddressID)); + System.out.println(averageAddress); + + //5. Найти адрес, по которому не проживает ни один пользователь. + // Для того, чтобы это сделать необходимо самостоятельно освоить такую SQL-конструкцию как JOIN + rs = smt.executeQuery("SELECT address\n" + + "FROM users RIGHT JOIN addresses\n" + + "ON users.address_id = addresses.id\n" + + "WHERE first_name is NULL"); + + while (rs.next()) { + addressWithoutUser = rs.getString(1); + } + + System.out.println(addressWithoutUser == null ? "null" : addressWithoutUser); + + } catch (SQLException | ClassNotFoundException e) { + e.printStackTrace(); + + System.out.println("Проблема при работе с БД!"); + System.exit(0); + } + } +} + diff --git a/src/ru/milandr/courses/pavlyuk/User.java b/src/ru/milandr/courses/pavlyuk/User.java new file mode 100644 index 0000000..86b4e0f --- /dev/null +++ b/src/ru/milandr/courses/pavlyuk/User.java @@ -0,0 +1,48 @@ +package ru.milandr.courses.pavlyuk; + +public class User { + private int id; + private String firstName; + private String lastName; + private int addressID; + private String phoneNumber; + + public User(int id, String firstName, String lastName, int addressID, String phoneNumber){ + this.id = id; + this.firstName = firstName; + this.lastName = lastName; + this.addressID = addressID; + this.phoneNumber = phoneNumber; + } + + @Override + public String toString() { + return "User{" + + "id='" + id + '\'' + + ", firstName='" + firstName + '\'' + + ", lastName='" + lastName + '\'' + + ", addressID='" + addressID + '\'' + + ", phoneNumber='" + phoneNumber + '\'' + + '}'; + } + + public int getId() { + return id; + } + + public String getFirstName() { + return firstName; + } + + public String getLastName() { + return lastName; + } + + public int getAddressID() { + return addressID; + } + + public String getPhoneNumber() { + return phoneNumber; + } +} From f45a6ad6a4d0cfa86cdb257e0ebc7fdfb9b11fe3 Mon Sep 17 00:00:00 2001 From: pavlyuklybov Date: Tue, 22 Oct 2019 18:23:55 +0300 Subject: [PATCH 2/3] =?UTF-8?q?=D0=A0=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=20=D0=B4=D0=BE=D0=BF.=20=D0=BA=D0=BB=D0=B0?= =?UTF-8?q?=D1=81=D1=81=20=20Users=20=D0=B4=D0=BB=D1=8F=20=D1=85=D1=80?= =?UTF-8?q?=D0=B0=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BF=D0=BE=D0=BB=D1=83?= =?UTF-8?q?=D1=87=D0=B5=D0=BD=D0=BD=D1=8B=D1=85=20=D0=B8=D0=B7=20=D0=B1?= =?UTF-8?q?=D0=B0=D0=B7=D1=8B=20=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2?= =?UTF-8?q?=D0=B0=D1=82=D0=B5=D0=BB=D0=B5=D0=B9,=20=D0=B0=20=D1=82=D0=B0?= =?UTF-8?q?=D0=BA=D0=B6=D0=B5=20=D0=B2=D1=8B=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8=D1=8F=20?= =?UTF-8?q?=D0=BF=D0=BE=20=D0=BF=D0=BE=D0=BB=D1=83=D1=87=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D1=8E=20=D0=B4=D0=B0=D0=BD=D0=BD=D1=8B=D1=85=20=D0=B8=D0=B7=20?= =?UTF-8?q?=D0=B1=D0=B0=D0=B7=D1=8B=20=D0=B2=20MainJava.=20=D0=A2=D0=B0?= =?UTF-8?q?=D0=BA=D0=B6=D0=B5=20=D0=B2=D1=8B=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=BE=20=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8=D0=B5=20?= =?UTF-8?q?=D0=BF=D0=BE=20=D0=BD=D0=B0=D0=BF=D0=B8=D1=81=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D1=8E=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=D0=B0=20=D1=81=D1=80?= =?UTF-8?q?=D0=B0=D0=B2=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=B1=D0=B0=D0=B7?= =?UTF-8?q?=20=D0=B4=D0=B0=D0=BD=D0=BD=D1=8B=D1=85=20=D0=B1=D0=B5=D0=B7=20?= =?UTF-8?q?=D0=B8=D1=81=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F=20=D1=86=D0=B8=D0=BA=D0=BB=D0=BE=D0=B2=20?= =?UTF-8?q?=D0=B2=20=D0=BA=D0=BB=D0=B0=D1=81=D1=81=D0=B5=20CompDatabase.?= =?UTF-8?q?=20=D0=9A=D0=B0=D0=BA=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0?= =?UTF-8?q?=D0=B5=D1=82=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=20=D0=BC=D0=BE?= =?UTF-8?q?=D0=B6=D0=BD=D0=BE=20=D1=83=D0=B2=D0=B8=D0=B4=D0=B5=D1=82=D1=8C?= =?UTF-8?q?=20=D0=B2=20CompAppl.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ru/milandr/courses/pavlyuk/CompAppl.java | 4 +- .../milandr/courses/pavlyuk/CompDatabase.java | 19 ++- .../pavlyuk/{MainJava.java => HomeTask4.java} | 49 +------- .../courses/pavlyuk/HomeTask4Methods.java | 108 ++++++++++++++++++ src/ru/milandr/courses/pavlyuk/User.java | 34 +++--- 5 files changed, 141 insertions(+), 73 deletions(-) rename src/ru/milandr/courses/pavlyuk/{MainJava.java => HomeTask4.java} (51%) create mode 100644 src/ru/milandr/courses/pavlyuk/HomeTask4Methods.java diff --git a/src/ru/milandr/courses/pavlyuk/CompAppl.java b/src/ru/milandr/courses/pavlyuk/CompAppl.java index 91e860c..0796368 100644 --- a/src/ru/milandr/courses/pavlyuk/CompAppl.java +++ b/src/ru/milandr/courses/pavlyuk/CompAppl.java @@ -2,11 +2,11 @@ public class CompAppl { public static void main(String[] args) { - boolean a = CompDatabase.compareData("jdbc:postgresql://localhost:5432/users_database", + boolean comparisonResult = CompDatabase.compareData("jdbc:postgresql://localhost:5432/users_database", "jdbc:postgresql://localhost:5432/users_database2", "users", "users", "id,last_name"); - System.out.println(a); + System.out.println(comparisonResult); } } diff --git a/src/ru/milandr/courses/pavlyuk/CompDatabase.java b/src/ru/milandr/courses/pavlyuk/CompDatabase.java index 7d80a79..dadb4b0 100644 --- a/src/ru/milandr/courses/pavlyuk/CompDatabase.java +++ b/src/ru/milandr/courses/pavlyuk/CompDatabase.java @@ -1,10 +1,4 @@ package ru.milandr.courses.pavlyuk; - - -import com.sun.prism.impl.Disposer; -import com.sun.xml.internal.ws.api.model.wsdl.WSDLOutput; - -import javax.swing.*; import java.sql.*; import java.util.*; @@ -13,8 +7,11 @@ public class CompDatabase { - public static boolean compareData(String db1Link, String db2Link, String table1Name, - String table2Name, String columns) { + public static boolean compareData(String db1Link, + String db2Link, + String table1Name, + String table2Name, + String columns) { HashMap> table1 = new HashMap<>(); @@ -32,9 +29,9 @@ public static boolean compareData(String db1Link, String db2Link, String table1N Connection con2 = DriverManager.getConnection(db2Link, "postgres", "postgres"); Statement smt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, - ResultSet.CONCUR_UPDATABLE); + ResultSet.CONCUR_READ_ONLY); Statement smt2 = con2.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, - ResultSet.CONCUR_UPDATABLE)) { + ResultSet.CONCUR_READ_ONLY)) { Class.forName("org.postgresql.Driver"); ResultSet rs = smt.executeQuery("SELECT * FROM " + table1Name); @@ -71,6 +68,6 @@ public static boolean compareData(String db1Link, String db2Link, String table1N System.out.println("Проблема при работе с БД!"); System.exit(0); } - System.out.println(table2.toString()); + return (table1.equals(table2)); } } diff --git a/src/ru/milandr/courses/pavlyuk/MainJava.java b/src/ru/milandr/courses/pavlyuk/HomeTask4.java similarity index 51% rename from src/ru/milandr/courses/pavlyuk/MainJava.java rename to src/ru/milandr/courses/pavlyuk/HomeTask4.java index f603818..1b6ae58 100644 --- a/src/ru/milandr/courses/pavlyuk/MainJava.java +++ b/src/ru/milandr/courses/pavlyuk/HomeTask4.java @@ -7,14 +7,9 @@ import java.util.List; import java.util.stream.Collectors; -public class MainJava { +public class HomeTask4 { public static void main(String[] args) { - List Users = new ArrayList<>(); - List AnteRoadUsers = new ArrayList<>(); - Double averageAddress; - String addressWithoutUser = null; - try (Connection con = DriverManager.getConnection("jdbc:postgresql://localhost:5432/users_database", "postgres", "postgres"); Statement smt = con.createStatement()) { @@ -24,58 +19,26 @@ public static void main(String[] args) { // Просто найти пользователя по условию id = 100 не будет считаться решением. // Вывести всю информацию о нем в консоль. - ResultSet rs = smt.executeQuery("SELECT * FROM users;"); - - while (rs.next()) { - User user = new User(rs.getInt("id"), rs.getString("first_name"), - rs.getString("last_name"), rs.getInt("address_id"), - rs.getString("phone_number")); - Users.add(user); - - } - - System.out.println(Collections.max(Users, Comparator.comparing(User::getId))); + HomeTask4Methods.method1(smt); //2. Вывести всех пользователей, проживающих по адресу P.O. Box 677, 8665 Ante Road. // Для того, чтобы это сделать необходимо самостоятельно освоить такую SQL-конструкцию как JOIN. - rs = smt.executeQuery("SELECT *\n" + - "FROM users INNER JOIN addresses\n" + - "ON users.address_id = addresses.id\n" + - "WHERE address = 'P.O. Box 677, 8665 Ante Road';"); - - while (rs.next()) { - User userID = new User(rs.getInt("id"), rs.getString("first_name"), - rs.getString("last_name"), rs.getInt("address_id"), - rs.getString("phone_number")); - AnteRoadUsers.add(userID); - } - - System.out.println(AnteRoadUsers.toString()); + HomeTask4Methods.method2(smt); //3. Вывести всех пользователей, отсортировав их средствами джавы (!) в алфавитном порядке по их фамилии. + HomeTask4Methods.method3(smt); - Users.sort((Comparator.comparing(User::getLastName))); - System.out.println(Users.toString()); // 4. Найти средствами джавы (!) среднее значение почтового индекса, учитывая только числовые значения индекса. - averageAddress = Users.stream().collect(Collectors.averagingDouble(User::getAddressID)); - System.out.println(averageAddress); + HomeTask4Methods.method4(smt); //5. Найти адрес, по которому не проживает ни один пользователь. // Для того, чтобы это сделать необходимо самостоятельно освоить такую SQL-конструкцию как JOIN - rs = smt.executeQuery("SELECT address\n" + - "FROM users RIGHT JOIN addresses\n" + - "ON users.address_id = addresses.id\n" + - "WHERE first_name is NULL"); - - while (rs.next()) { - addressWithoutUser = rs.getString(1); - } - System.out.println(addressWithoutUser == null ? "null" : addressWithoutUser); + HomeTask4Methods.method5(smt); } catch (SQLException | ClassNotFoundException e) { e.printStackTrace(); diff --git a/src/ru/milandr/courses/pavlyuk/HomeTask4Methods.java b/src/ru/milandr/courses/pavlyuk/HomeTask4Methods.java new file mode 100644 index 0000000..4f57997 --- /dev/null +++ b/src/ru/milandr/courses/pavlyuk/HomeTask4Methods.java @@ -0,0 +1,108 @@ +package ru.milandr.courses.pavlyuk; + +import java.sql.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; +import java.util.stream.Collectors; + +public class HomeTask4Methods { + + // 1. Найти средствами джавы (!) пользователя с наибольшим id. + // Просто найти пользователя по условию id = 100 не будет считаться решением. + // Вывести всю информацию о нем в консоль. + + public static void method1(Statement smt) throws SQLException { + List users = new ArrayList<>(); + ResultSet rs = smt.executeQuery("SELECT * FROM users;"); + + while (rs.next()) { + User user = new User(rs.getInt("id"), rs.getString("first_name"), + rs.getString("last_name"), rs.getInt("address_id"), + rs.getString("phone_number")); + users.add(user); + + } + + System.out.println(Collections.max(users, Comparator.comparing(User::getId))); + } + + //2. Вывести всех пользователей, проживающих по адресу P.O. Box 677, 8665 Ante Road. + // Для того, чтобы это сделать необходимо самостоятельно освоить такую SQL-конструкцию как JOIN. + + public static void method2(Statement smt) throws SQLException { + + List usersLivingAtAnteRoad = new ArrayList<>(); + + ResultSet rs = smt.executeQuery("SELECT * " + + "FROM users INNER JOIN addresses " + + "ON users.address_id = addresses.id " + + "WHERE address = 'P.O. Box 677, 8665 Ante Road';"); + + while (rs.next()) { + User userID = new User(rs.getInt("id"), rs.getString("first_name"), + rs.getString("last_name"), rs.getInt("address_id"), + rs.getString("phone_number")); + usersLivingAtAnteRoad.add(userID); + } + + System.out.println(usersLivingAtAnteRoad.toString()); + } + + //3. Вывести всех пользователей, отсортировав их средствами джавы (!) в алфавитном порядке по их фамилии. + public static void method3(Statement smt) throws SQLException { + List users = new ArrayList<>(); + ResultSet rs = smt.executeQuery("SELECT * FROM users;"); + + while (rs.next()) { + User user = new User(rs.getInt("id"), rs.getString("first_name"), + rs.getString("last_name"), rs.getInt("address_id"), + rs.getString("phone_number")); + users.add(user); + + } + + users.sort((Comparator.comparing(User::getLastName))); + System.out.println(users.toString()); + } + + // 4. Найти средствами джавы (!) среднее значение почтового индекса, учитывая только числовые значения индекса. + + public static void method4(Statement smt) throws SQLException { + Double averageAddress; + List users = new ArrayList<>(); + ResultSet rs = smt.executeQuery("SELECT * FROM users;"); + + while (rs.next()) { + User user = new User(rs.getInt("id"), rs.getString("first_name"), + rs.getString("last_name"), rs.getInt("address_id"), + rs.getString("phone_number")); + users.add(user); + + } + + averageAddress = users.stream().collect(Collectors.averagingDouble(User::getAddressId)); + System.out.println(averageAddress); + } + + //5. Найти адрес, по которому не проживает ни один пользователь. + // Для того, чтобы это сделать необходимо самостоятельно освоить такую SQL-конструкцию как JOIN + + public static void method5(Statement smt) throws SQLException{ + String addressWithoutUser = null; + ResultSet rs = smt.executeQuery("SELECT address " + + "FROM users RIGHT JOIN addresses " + + "ON users.address_id = addresses.id " + + "WHERE first_name is NULL;"); + + while (rs.next()) { + addressWithoutUser = rs.getString(1); + } + + System.out.println(addressWithoutUser == null ? "null" : addressWithoutUser); + + } + + +} diff --git a/src/ru/milandr/courses/pavlyuk/User.java b/src/ru/milandr/courses/pavlyuk/User.java index 86b4e0f..8912a80 100644 --- a/src/ru/milandr/courses/pavlyuk/User.java +++ b/src/ru/milandr/courses/pavlyuk/User.java @@ -1,31 +1,20 @@ package ru.milandr.courses.pavlyuk; public class User { - private int id; + private int id; private String firstName; private String lastName; - private int addressID; + private int addressId; private String phoneNumber; - public User(int id, String firstName, String lastName, int addressID, String phoneNumber){ + public User(int id, String firstName, String lastName, int addressId, String phoneNumber) { this.id = id; this.firstName = firstName; this.lastName = lastName; - this.addressID = addressID; + this.addressId = addressId; this.phoneNumber = phoneNumber; } - @Override - public String toString() { - return "User{" + - "id='" + id + '\'' + - ", firstName='" + firstName + '\'' + - ", lastName='" + lastName + '\'' + - ", addressID='" + addressID + '\'' + - ", phoneNumber='" + phoneNumber + '\'' + - '}'; - } - public int getId() { return id; } @@ -38,11 +27,22 @@ public String getLastName() { return lastName; } - public int getAddressID() { - return addressID; + public int getAddressId() { + return addressId; } public String getPhoneNumber() { return phoneNumber; } + + @Override + public String toString() { + return "User{" + + "id='" + id + '\'' + + ", firstName='" + firstName + '\'' + + ", lastName='" + lastName + '\'' + + ", addressID='" + addressId + '\'' + + ", phoneNumber='" + phoneNumber + '\'' + + '}'; + } } From bf4b401377e519da5744dbcbcfd492b410da1f83 Mon Sep 17 00:00:00 2001 From: pavlyuklybov Date: Wed, 23 Oct 2019 11:51:26 +0300 Subject: [PATCH 3/3] =?UTF-8?q?=D0=A3=D1=87=D1=82=D0=B5=D0=BD=D1=8B=20?= =?UTF-8?q?=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B8=20=D0=B8=D0=B7=20review=20?= =?UTF-8?q?2=20=D0=B4=D0=BB=D1=8F=20=D0=94=D0=974=20=D0=B8=20=D0=94=D0=975?= =?UTF-8?q?.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../milandr/courses/pavlyuk/CompDatabase.java | 47 ++++---- .../courses/pavlyuk/HomeTask4Methods.java | 101 +++++++++--------- src/ru/milandr/courses/pavlyuk/User.java | 2 +- 3 files changed, 76 insertions(+), 74 deletions(-) diff --git a/src/ru/milandr/courses/pavlyuk/CompDatabase.java b/src/ru/milandr/courses/pavlyuk/CompDatabase.java index dadb4b0..a81aedc 100644 --- a/src/ru/milandr/courses/pavlyuk/CompDatabase.java +++ b/src/ru/milandr/courses/pavlyuk/CompDatabase.java @@ -1,4 +1,5 @@ package ru.milandr.courses.pavlyuk; + import java.sql.*; import java.util.*; @@ -28,14 +29,16 @@ public static boolean compareData(String db1Link, "postgres", "postgres"); Connection con2 = DriverManager.getConnection(db2Link, "postgres", "postgres"); - Statement smt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, + Statement smt = con.createStatement( + ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); - Statement smt2 = con2.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, + Statement smt2 = con2.createStatement( + ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY)) { Class.forName("org.postgresql.Driver"); - ResultSet rs = smt.executeQuery("SELECT * FROM " + table1Name); - ResultSet rs2 = smt2.executeQuery("SELECT * FROM " + table2Name); + ResultSet rs = smt.executeQuery("SELECT " + columns + " FROM " + table1Name); + ResultSet rs2 = smt2.executeQuery("SELECT " + columns + " FROM " + table2Name); rs.last(); int numberOfRowsTable1 = rs.getRow(); @@ -47,21 +50,24 @@ public static boolean compareData(String db1Link, return false; } - IntStream stream = IntStream.range(1, numberOfRowsTable1); - stream.forEach(e -> requestedColumns.forEach(col -> { - try { - rs.absolute(e); - rs2.absolute(e); - table1.get(col).add(rs.getString(col)); - table2.get(col).add(rs2.getString(col)); - - } catch (SQLException ex) { - ex.printStackTrace(); - System.out.println("Введенные колонки не найдены"); - System.exit(0); - - } - })); + if (numberOfRowsTable1 == 0) { + return true; + } + + IntStream stream = IntStream.range(1, numberOfRowsTable1 + 1); + stream.forEach(e -> requestedColumns + .forEach(col -> { + try { + rs.absolute(e); + rs2.absolute(e); + table1.get(col).add(rs.getString(col)); + table2.get(col).add(rs2.getString(col)); + } catch (SQLException ex) { + ex.printStackTrace(); + System.out.println("Введенные колонки не найдены"); + System.exit(0); + } + })); } catch (SQLException | ClassNotFoundException e) { e.printStackTrace(); @@ -69,5 +75,6 @@ public static boolean compareData(String db1Link, System.exit(0); } - return (table1.equals(table2)); } + return (table1.equals(table2)); + } } diff --git a/src/ru/milandr/courses/pavlyuk/HomeTask4Methods.java b/src/ru/milandr/courses/pavlyuk/HomeTask4Methods.java index 4f57997..b49da33 100644 --- a/src/ru/milandr/courses/pavlyuk/HomeTask4Methods.java +++ b/src/ru/milandr/courses/pavlyuk/HomeTask4Methods.java @@ -9,100 +9,95 @@ public class HomeTask4Methods { - // 1. Найти средствами джавы (!) пользователя с наибольшим id. - // Просто найти пользователя по условию id = 100 не будет считаться решением. - // Вывести всю информацию о нем в консоль. - - public static void method1(Statement smt) throws SQLException { + /** + * Создает коллекцию из объектов класса Users по переданным полям из таблицы users базы данных users_database. + * + * @param rs множетсва результатов данных, полученных в результате SQL – запроса. + * @return коллекция из объектов класса Users, полученная после обработки результата rs. + * @throws SQLException Может возникнуть при вызове метода selectAllData. + */ + private static List selectAllData(ResultSet rs) throws SQLException { List users = new ArrayList<>(); - ResultSet rs = smt.executeQuery("SELECT * FROM users;"); - while (rs.next()) { User user = new User(rs.getInt("id"), rs.getString("first_name"), rs.getString("last_name"), rs.getInt("address_id"), rs.getString("phone_number")); users.add(user); - } + return users; + } + /** + * Находит в таблице users пользователя c наибольшим id и выводит всю информацию о нем. + * + * @param smt объект типа Statement, служащий для исполнения запросов к базе данных users_database. + * @throws SQLException Может возникнуть при вызове метода selectAllData. + */ + public static void method1(Statement smt) throws SQLException { + ResultSet rs = smt.executeQuery("SELECT * FROM users;"); + List users = selectAllData(rs); System.out.println(Collections.max(users, Comparator.comparing(User::getId))); } - //2. Вывести всех пользователей, проживающих по адресу P.O. Box 677, 8665 Ante Road. - // Для того, чтобы это сделать необходимо самостоятельно освоить такую SQL-конструкцию как JOIN. - + /** + * Находит в таблице users всех пользователей, проживающих по адресу P.O. Box 677, 8665 Ante Road и выводит. + * + * @param smt объект типа Statement, служащий для исполнения запросов к базе данных users_database. + * @throws SQLException Может возникнуть при вызове метода selectAllData. + */ public static void method2(Statement smt) throws SQLException { - - List usersLivingAtAnteRoad = new ArrayList<>(); - ResultSet rs = smt.executeQuery("SELECT * " + "FROM users INNER JOIN addresses " + "ON users.address_id = addresses.id " + "WHERE address = 'P.O. Box 677, 8665 Ante Road';"); - - while (rs.next()) { - User userID = new User(rs.getInt("id"), rs.getString("first_name"), - rs.getString("last_name"), rs.getInt("address_id"), - rs.getString("phone_number")); - usersLivingAtAnteRoad.add(userID); - } - + List usersLivingAtAnteRoad = selectAllData(rs); System.out.println(usersLivingAtAnteRoad.toString()); } - //3. Вывести всех пользователей, отсортировав их средствами джавы (!) в алфавитном порядке по их фамилии. + /** + * Сортирует в алфавитном порядке по фамилии пользователей из таблицы users и выводит. + * + * @param smt объект типа Statement, служащий для исполнения запросов к базе данных users_database. + * @throws SQLException Может возникнуть при вызове метода selectAllData. + */ public static void method3(Statement smt) throws SQLException { - List users = new ArrayList<>(); ResultSet rs = smt.executeQuery("SELECT * FROM users;"); + List users = selectAllData(rs); - while (rs.next()) { - User user = new User(rs.getInt("id"), rs.getString("first_name"), - rs.getString("last_name"), rs.getInt("address_id"), - rs.getString("phone_number")); - users.add(user); - - } - - users.sort((Comparator.comparing(User::getLastName))); + users.sort(Comparator.comparing(User::getLastName)); System.out.println(users.toString()); } - // 4. Найти средствами джавы (!) среднее значение почтового индекса, учитывая только числовые значения индекса. - + /** + * Находит в таблице users среднее значение почтового индекса. + * + * @param smt объект типа Statement, служащий для исполнения запросов к базе данных users_database. + * @throws SQLException Может возникнуть при вызове метода selectAllData. + */ public static void method4(Statement smt) throws SQLException { Double averageAddress; - List users = new ArrayList<>(); ResultSet rs = smt.executeQuery("SELECT * FROM users;"); - - while (rs.next()) { - User user = new User(rs.getInt("id"), rs.getString("first_name"), - rs.getString("last_name"), rs.getInt("address_id"), - rs.getString("phone_number")); - users.add(user); - - } + List users = selectAllData(rs); averageAddress = users.stream().collect(Collectors.averagingDouble(User::getAddressId)); System.out.println(averageAddress); } - //5. Найти адрес, по которому не проживает ни один пользователь. - // Для того, чтобы это сделать необходимо самостоятельно освоить такую SQL-конструкцию как JOIN - - public static void method5(Statement smt) throws SQLException{ + /** + * Находит в базе данных users_database адрес из таблицы addresses, по которому не проживает ни один пользователь из таблицы users. + * + * @param smt объект типа Statement, служащий для исполнения запросов к базе данных users_database. + * @throws SQLException Может возникнуть при вызове метода selectAllData. + */ + public static void method5(Statement smt) throws SQLException { String addressWithoutUser = null; ResultSet rs = smt.executeQuery("SELECT address " + "FROM users RIGHT JOIN addresses " + "ON users.address_id = addresses.id " + "WHERE first_name is NULL;"); - while (rs.next()) { addressWithoutUser = rs.getString(1); } - System.out.println(addressWithoutUser == null ? "null" : addressWithoutUser); - } - - } diff --git a/src/ru/milandr/courses/pavlyuk/User.java b/src/ru/milandr/courses/pavlyuk/User.java index 8912a80..c55be3d 100644 --- a/src/ru/milandr/courses/pavlyuk/User.java +++ b/src/ru/milandr/courses/pavlyuk/User.java @@ -41,7 +41,7 @@ public String toString() { "id='" + id + '\'' + ", firstName='" + firstName + '\'' + ", lastName='" + lastName + '\'' + - ", addressID='" + addressId + '\'' + + ", addressId='" + addressId + '\'' + ", phoneNumber='" + phoneNumber + '\'' + '}'; }