Facebook
From Tiny Gibbon, 7 Years ago, written in Java.
Embed
Download Paste or View Raw
Hits: 329
  1. package database;
  2.  
  3. import javafx.collections.FXCollections;
  4. import javafx.collections.ObservableList;
  5. import javafx.scene.control.TableColumn;
  6. import javafx.scene.control.TableView;
  7. import javafx.scene.control.cell.PropertyValueFactory;
  8.  
  9. import java.math.BigDecimal;
  10. import java.sql.*;
  11. import java.time.LocalDate;
  12. import java.util.Collection;
  13. import java.util.LinkedList;
  14.  
  15. /**
  16.  Created by Rafał Byczek on 02.06.16. */
  17. final public class Database
  18. {
  19.         /**
  20.          Only instance of database
  21.          */
  22.         public static final Database instance=new Database();
  23.         /**
  24.          database to database
  25.          */
  26.         public final Connection connection;
  27.  
  28.  
  29.         private static final String SERVER_ADRES="localhost";
  30.         private static final String PORT="5432";
  31.         private static final String DB_NAME="projektID";
  32.         private static final String USER_NAME="rafalbyczek";
  33.         private static final String PASSWORD="haselko123";
  34.  
  35.  
  36.         /**
  37.          Constructor
  38.          */
  39.         private Database()
  40.         {
  41.                 try
  42.                 {
  43.                         Class.forName("org.postgresql.Driver");
  44.                         connection=DriverManager.getConnection("jdbc:postgresql://"+SERVER_ADRES+':'+PORT+'/'+DB_NAME,USER_NAME,PASSWORD);
  45.                 }catch(ClassNotFoundException|SQLException e)
  46.                 {
  47.                         throw new DatabaseException(e);
  48.                 }
  49.         }
  50.  
  51.  
  52.  
  53.  
  54.         private static <T,S> void insertColumn(final TableView<T> table,final Class<S> typeTag,final String name,final int minWidth)
  55.         {
  56.                 final TableColumn<T, S> firstNameCol = new TableColumn<>(name);
  57.                 firstNameCol.setMinWidth(minWidth);
  58.                 firstNameCol.setCellValueFactory(new PropertyValueFactory<>(name));
  59.                 table.getColumns().addAll(firstNameCol);
  60.         }
  61.  
  62.         private ObservableList<Driver> getDriversList()
  63.         {
  64.                 final Collection<Driver> data=new LinkedList<>();
  65.  
  66.                 try(Statement statement=connection.createStatement();
  67.                         ResultSet resultSet=statement.executeQuery("SELECT * FROM kierowcy;"))
  68.                 {
  69.  
  70.                         while(resultSet.next())
  71.                         {
  72.                                 data.add(new Driver(resultSet.getInt(1),resultSet.getString(2),resultSet.getString(3),resultSet.getString(4),resultSet.getString(5),resultSet.getString(6),resultSet.getString(7)));
  73.                         }
  74.                 }catch(final SQLException e)
  75.                 {
  76.                         throw new DatabaseException(e);
  77.                 }
  78.                 return FXCollections.observableArrayList(data);
  79.         }
  80.  
  81.         public void getDriversTable(final TableView<Driver> driversTable)
  82.         {
  83.                 insertColumn(driversTable,Integer.class,"id_kierowcy",3);
  84.                 insertColumn(driversTable,String.class,"PESEL",30);
  85.                 insertColumn(driversTable,String.class,"imię",20);
  86.                 insertColumn(driversTable,String.class,"nazwisko",20);
  87.                 insertColumn(driversTable,String.class,"email",30);
  88.                 insertColumn(driversTable,String.class,"nr_telefonu",10);
  89.                 insertColumn(driversTable,String.class,"adres",50);
  90.                 driversTable.setItems(getDriversList());
  91.         }
  92.  
  93.  
  94.         private ObservableList<Vehicle> getVehiclesList()
  95.         {
  96.                 final Collection<Vehicle> data=new LinkedList<>();
  97.  
  98.                 try(Statement statement=connection.createStatement();
  99.                         ResultSet resultSet=statement.executeQuery("SELECT * FROM pojazdy;"))
  100.                 {
  101.                         while(resultSet.next())
  102.                         {
  103.                                 data.add(new Vehicle(resultSet.getInt(1),resultSet.getString(2),resultSet.getDate(3).toLocalDate(),resultSet.getString(4),resultSet.getString(5),resultSet.getString(6)));
  104.                         }
  105.                 }catch(final SQLException e)
  106.                 {
  107.                         throw new DatabaseException(e);
  108.                 }
  109.                 return FXCollections.observableArrayList(data);
  110.         }
  111.  
  112.  
  113.         public void getVehiclesTable(final TableView<Vehicle> vehiclesTable)
  114.         {
  115.                 insertColumn(vehiclesTable,Integer.class,"id_pojazdu",3);
  116.                 insertColumn(vehiclesTable,String.class,"nr_rejestracyjny",30);
  117.                 insertColumn(vehiclesTable,LocalDate.class,"data_rejestracji",20);
  118.                 insertColumn(vehiclesTable,String.class,"marka",20);
  119.                 insertColumn(vehiclesTable,String.class,"model",30);
  120.                 insertColumn(vehiclesTable,String.class,"typ",10);
  121.                 vehiclesTable.setItems(getVehiclesList());
  122.         }
  123.  
  124.         private ObservableList<Exam> getExamsList()
  125.         {
  126.                 final Collection<Exam> data=new LinkedList<>();
  127.  
  128.                 try(Statement statement=connection.createStatement();
  129.                         ResultSet resultSet=statement.executeQuery("SELECT id_egzaminu,data_przeprowadzenia,typ,nazwa,O.adres,E.imię,E.nazwisko,K.imię,K.nazwisko,wynik FROM egzaminy NATURAL JOIN egzaminatorzy E NATURAL JOIN ośrodki O NATURAL JOIN wyniki_egzaminów JOIN kierowcy K USING(id_kierowcy);"))
  130.                 {
  131.                         while(resultSet.next())
  132.                         {
  133.                                 data.add(new Exam(resultSet.getInt(1),resultSet.getDate(2).toLocalDate(),resultSet.getString(3),resultSet.getString(4),resultSet.getString(5),resultSet.getString(6),resultSet.getString(7),resultSet.getString(8),resultSet.getString(9),resultSet.getString(10)));
  134.                         }
  135.                 }catch(final SQLException e)
  136.                 {
  137.                         throw new DatabaseException(e);
  138.                 }
  139.                 return FXCollections.observableArrayList(data);
  140.         }
  141.  
  142.         public void getExamsTable(final TableView<Exam> examTable)
  143.         {
  144.                 insertColumn(examTable,String.class,"imię_zdającego",30);
  145.                 insertColumn(examTable,String.class,"nazwisko_zdającego",10);
  146.                 insertColumn(examTable,String.class,"wynik",10);
  147.                 insertColumn(examTable,Integer.class,"id_egzaminu",3);
  148.                 insertColumn(examTable,LocalDate.class,"data_przeprowadzenia",30);
  149.                 insertColumn(examTable,String.class,"typ",20);
  150.                 insertColumn(examTable,String.class,"nazwa_ośrodka",20);
  151.                 insertColumn(examTable,String.class,"adres_ośrodka",30);
  152.                 insertColumn(examTable,String.class,"imię_egzaminatora",10);
  153.                 insertColumn(examTable,String.class,"nazwisko_egzaminatora",10);
  154.                 examTable.setItems(getExamsList());
  155.         }
  156.  
  157.         private ObservableList<Offence> getOffenceList()
  158.         {
  159.                 final Collection<Offence> data=new LinkedList<>();
  160.  
  161.                 try(Statement statement=connection.createStatement();
  162.                         ResultSet resultSet=statement.executeQuery("SELECT K.imię,K.nazwisko,W.opis,W.wysokość_grzywny,W.punkty_karne FROM kierowcy K NATURAL JOIN mandaty M NATURAL JOIN wykroczenia W"))
  163.                 {
  164.                         while(resultSet.next())
  165.                         {
  166.                                 data.add(new Offence(resultSet.getString(1),resultSet.getString(2),resultSet.getString(3),resultSet.getBigDecimal(4),resultSet.getInt(5)));
  167.                         }
  168.                 }catch(final SQLException e)
  169.                 {
  170.                         throw new DatabaseException(e);
  171.                 }
  172.                 return FXCollections.observableArrayList(data);
  173.         }
  174.  
  175.         public void getOffenceTable(final TableView<Offence> examTable)
  176.         {
  177.                 insertColumn(examTable,String.class,"imię_sprawcy",30);
  178.                 insertColumn(examTable,String.class,"nazwisko_sprawcy",30);
  179.                 insertColumn(examTable,String.class,"opis",30);
  180.                 insertColumn(examTable,BigDecimal.class,"grzywna",30);
  181.                 insertColumn(examTable,String.class,"punkty_karne",30);
  182.                 examTable.setItems(getOffenceList());
  183.         }
  184.  
  185.         public String getDriversVehicles(final int driver)
  186.         {
  187.                 String pojazdy="";
  188.                 try(PreparedStatement preparedStatement=connection.prepareStatement("SELECT pojazdy(?)"))
  189.                 {
  190.                         preparedStatement.setInt(1,driver);
  191.                         try(ResultSet resultSet=preparedStatement.executeQuery())
  192.                         {
  193.                                 while(resultSet.next())
  194.                                         pojazdy+=resultSet.getString(1)+',';
  195.                         }
  196.                 }catch(final SQLException e)
  197.                 {
  198.                         throw new DatabaseException(e);
  199.                 }
  200.                 if(pojazdy.isEmpty())
  201.                         return "";
  202.                 return pojazdy.substring(0,pojazdy.length()-1);
  203.         }
  204.  
  205.         public String getDriverSimpleStringInformation(final String query,final int driver)
  206.         {
  207.                 String result;
  208.                 try(PreparedStatement preparedStatement=connection.prepareStatement(query))
  209.                 {
  210.                         preparedStatement.setInt(1,driver);
  211.                         try(ResultSet resultSet=preparedStatement.executeQuery())
  212.                         {
  213.                                 if(resultSet.next())
  214.                                         return resultSet.getString(1);
  215.                         }
  216.                 }catch(final SQLException e)
  217.                 {
  218.                         throw new DatabaseException(e);
  219.                 }
  220.                 throw new IllegalArgumentException("Query did not returned results");
  221.         }
  222.  
  223.  
  224.  
  225.  
  226.         /*public static void main(String[] args) {
  227.                 launch(args);
  228.         }
  229.  
  230.         public void start() {
  231.  
  232.                 final Label label = new Label("Address Book");
  233.                 label.setFont(new Font("Arial", 20));
  234.  
  235.                 table.setEditable(true);
  236.  
  237.                 TableColumn firstNameCol = new TableColumn("First Name");
  238.                 firstNameCol.setMinWidth(100);
  239.                 firstNameCol.setCellValueFactory(
  240.                                 new PropertyValueFactory<Person, String>("firstName"));
  241.  
  242.                 TableColumn lastNameCol = new TableColumn("Last Name");
  243.                 lastNameCol.setMinWidth(100);
  244.                 lastNameCol.setCellValueFactory(
  245.                                 new PropertyValueFactory<Person, String>("lastName"));
  246.  
  247.                 TableColumn emailCol = new TableColumn("Email");
  248.                 emailCol.setMinWidth(200);
  249.                 emailCol.setCellValueFactory(
  250.                                 new PropertyValueFactory<Person, String>("email"));
  251.  
  252.                 table.setItems(data);
  253.                 table.getColumns().addAll(firstNameCol, lastNameCol, emailCol);
  254.  
  255.                 final VBox vbox = new VBox();
  256.                 vbox.setSpacing(5);
  257.                 vbox.setPadding(new Insets(10, 0, 0, 10));
  258.                 vbox.getChildren().addAll(label, table);
  259.  
  260.                 ((Group) scene.getRoot()).getChildren().addAll(vbox);
  261.  
  262.                 stage.setScene(scene);
  263.                 stage.show();
  264.         }
  265.  
  266.         public static class Person {
  267.  
  268.                 private final SimpleStringProperty firstName;
  269.                 private final SimpleStringProperty lastName;
  270.                 private final SimpleStringProperty email;
  271.  
  272.                 private Person(String fName, String lName, String email) {
  273.                         this.firstName = new SimpleStringProperty(fName);
  274.                         this.lastName = new SimpleStringProperty(lName);
  275.                         this.email = new SimpleStringProperty(email);
  276.                 }
  277.  
  278.                 public String getFirstName() {
  279.                         return firstName.get();
  280.                 }
  281.  
  282.                 public void setFirstName(String fName) {
  283.                         firstName.set(fName);
  284.                 }
  285.  
  286.                 public String getLastName() {
  287.                         return lastName.get();
  288.                 }
  289.  
  290.                 public void setLastName(String fName) {
  291.                         lastName.set(fName);
  292.                 }
  293.  
  294.                 public String getEmail() {
  295.                         return email.get();
  296.                 }
  297.  
  298.                 public void setEmail(String fName) {
  299.                         email.set(fName);
  300.                 }
  301.         }
  302. */
  303.  
  304.         /**
  305.          Standard exception thrown when something wrong with database
  306.          */
  307.         private static class DatabaseException extends RuntimeException
  308.         {
  309.                 /**
  310.                  UID for serialization
  311.                  */
  312.                 private static final long serialVersionUID=4187053082188070490L;
  313.  
  314.                 /**
  315.                  Constructor
  316.                  */
  317.                 DatabaseException()
  318.                 {
  319.                         super();
  320.                 }
  321.  
  322.                 /**
  323.                  Constructor
  324.                  @param message Message why exception occurred
  325.                  */
  326.                 DatabaseException(final String message)
  327.                 {
  328.                         super(message);
  329.                 }
  330.  
  331.                 /**
  332.                  Constructor
  333.                  @param cause Cause of exception
  334.                  */
  335.                 DatabaseException(final Throwable cause)
  336.                 {
  337.                         super(cause);
  338.                 }
  339.  
  340.                 /**
  341.                  Constructor
  342.                  @param message Message why exception occurred
  343.                  @param cause   Cause of exception
  344.                  */
  345.                 DatabaseException(final String message,final Throwable cause)
  346.                 {
  347.                         super(message,cause);
  348.                 }
  349.         }
  350. }
  351.