
package bazasqlite;
//package javadb;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class BazaSQLite {

    public static void main(String[] args) {
        // Nazwa bazy
        String baza = "biuro";
        String tabela = "kadra";
        // Wywołanie metody polacz, która zwraca oboekt typu Connection
        Connection polaczenie = polacz(baza);
//        stworzTabele(polaczenie, baza);

//        Takson gatunek1 = new Takson(1, "Acer", "negundo", 26, 13);
//        dodajDane(gatunek1, baza);
//        Takson gatunek2 = new Takson(2, "Acer", "saccharinum", 52, 13);
//        dodajDane(gatunek2, baza);
//        Takson gatunek3 = new Takson(3, "Amaranthus", "bouchonii", 52, 13);
//        gatunek3.setUwagi("Sprawdzić dane!");
//        dodajDane(gatunek3, baza);

        szukaj(baza, tabela);
        
       // szukaj(baza, "ID", "3");
       // zmien(baza, "ID", "3", "UWAGI", "Dane sprawdzone");
        //szukaj(baza, "ID", "3");
        
   //     usun(baza, "GATUNEK", "saccharinum");
       // szukaj(baza, "RODZAJ", "Acer");
       
       zmien(baza, "nazwisko", "Kotwica", "nazwisko", "Kowalski");
       

    }

    /**
     * Metoda odpowiedzialna za połączenie z bazą jeśli bazy nie ma to zostaje
     * utworzona
     */
    public static Connection polacz(String baza) {
        Connection polaczenie = null;
        try {
            // Wskazanie jaki rodzaj bazy danych bęzie wykorzystany, tu sqlite
            Class.forName("org.sqlite.JDBC");
            // Połączenie, wskazujemy rodzaj bazy i jej nazwę
            polaczenie = DriverManager.getConnection("jdbc:sqlite:" + baza + ".db");
            System.out.println("Połączyłem się z bazą " + baza);
        } catch (Exception e) {
            System.err.println("Błąd w połączeniu z bazą...: \n" + e.getMessage());
            return null;
        }
        return polaczenie;
    }

    /**
     * Metoda odpowiedzialna za tworzenie tabeli
     */
    public static void stworzTabele(Connection polaczenie, String tabela) {
        // Obiekt odpowiadający za wykonanie instrukcji
        Statement stat = null;
        try {
            stat = polaczenie.createStatement();
            // polecenie SQL tworzące tablicę
            String tabelaSQL = "CREATE TABLE " + tabela
                    + " (ID INT PRIMARY KEY     NOT NULL,"
                    + " RODZAJ         CHAR(50)    NOT NULL, "
                    + " GATUNEK        CHAR(50)     NOT NULL, "
                    + " N2             INT, "
                    + " X              INT, "
                    + " UWAGI          TEXT)";
            // wywołanie polecenia
            stat.executeUpdate(tabelaSQL);
            // zamykanie wywołania i połączenia
            stat.close();
            polaczenie.close();
        } catch (SQLException e) {
            System.out.println("Nie mogę stworzyć tabeli " + e.getMessage());
        }
    }

    /**
     * Metoda odpowiedzialna za dodawanie danych do tabeli
     */
//    public static void dodajDane(Takson takson, String baza) {
//        Connection polaczenie = null;
//        Statement stat = null;
//        try {
//            Class.forName("org.sqlite.JDBC");
//            polaczenie = DriverManager.getConnection("jdbc:sqlite:" + baza + ".db");
//
//            stat = polaczenie.createStatement();
//            String dodajSQL = "INSERT INTO " + baza + " (ID, RODZAJ, GATUNEK, N2, X, UWAGI) "
//                    + "VALUES ("
//                    + takson.getId() + ","
//                    + "'" + takson.getRodzaj() + "',"
//                    + "'" + takson.getGatunek() + "',"
//                    + takson.getN2() + ","
//                    + takson.getX() + ","
//                    + "'" + takson.getUwagi() + "'"
//                    + "  );";
//            stat.executeUpdate(dodajSQL);
//            stat.close();
//            polaczenie.close(); 
//            // Komunikat i wydrukowanie końcowej formy polecenia SQL
//            System.out.println("Polecenie: \n" + dodajSQL + "\n wykonane.");
//        } catch (Exception e) {
//            System.out.println("Nie mogę dodać danych " + e.getMessage());
//        }
//
//    }

    /**
     * Metoda odpowiedzialna za wyszukanie danych i wydrukowanie rezultatu
     */
    public static void szukaj(String baza, String tabela) {
        Connection polaczenie = null;
        Statement stat = null;
        try {
            Class.forName("org.sqlite.JDBC");
            polaczenie = DriverManager.getConnection("jdbc:sqlite:" + baza + ".db");
            stat = polaczenie.createStatement();
            // Polecenie wyszukania
            String szukajSQL = "SELECT * FROM "  + tabela + ";";

            ResultSet wynik = stat.executeQuery(szukajSQL);
            System.out.println("Polecenie:\n" + szukajSQL);

            while (wynik.next()) {
                int id = wynik.getInt("id");
                System.out.println("ID:       " + id);
                System.out.println("Imię:   " + wynik.getString("imie"));
                System.out.println("Nazwisko:  " + wynik.getString("nazwisko"));
                System.out.println(" ---------------------- ");
            }
            wynik.close();
            stat.close();
            polaczenie.close();
        } catch (Exception e) {
            System.out.println("Nie mogę wyszukać danych " + e.getMessage());
        }

    }

    /**
     * Metoda odpowiedzialna za zmianę danych      */
    public static void zmien(String baza, String poleSzukane, String wartoscSzukana,
                             String poleZmieniane, String nowaWartosc) {
        Connection polaczenie = null;
        Statement stat = null;
        try {
            Class.forName("org.sqlite.JDBC");
            polaczenie = DriverManager.getConnection("jdbc:sqlite:" + baza + ".db");
            stat = polaczenie.createStatement();
            // Polecenie zmiany
            String zmienSQL = "UPDATE " + baza + " SET "
                    + poleZmieniane + " = '" + nowaWartosc
                    + "' WHERE " + poleSzukane + "='" + wartoscSzukana + "';";
            System.out.println("Polecenie zmiany:\n" + zmienSQL);
            // Uwaga: wywołujemy metodę executeUpdate
            stat.executeUpdate(zmienSQL);
            
            stat.close();
            polaczenie.close();
        } catch (Exception e) {
            System.out.println("Nie mogę poprawić danych " + e.getMessage());
        }
    }    

     /**
     * Metoda odpowiedzialna za usunięcie danych 
     */
//    public static void usun(String baza, String pole, String wartosc) {
//        Connection polaczenie = null;
//        Statement stat = null;
//        try {
//            Class.forName("org.sqlite.JDBC");
//            polaczenie = DriverManager.getConnection("jdbc:sqlite:" + baza + ".db");
//            stat = polaczenie.createStatement();
//            // Polecenie usunięcia
//            String usunSQL = "DELETE FROM "+ baza + " WHERE " + pole +
//                    "='" + wartosc + "';";
//            System.out.println("Polecenie:\n" + usunSQL);
//            stat.executeUpdate(usunSQL);
//            stat.close();
//            polaczenie.close();
//        } catch (Exception e) {
//            System.out.println("Nie mogę usunąć danych " + e.getMessage());
//        }
//
//    }
}
