package bazy.podstawy;

import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Objects;

import javax.swing.JOptionPane;

public class Parametry2 {

    /* Rozwiązanie 2:
     * Za pomocą WHERE filtrujemy rekordy po stronie bazy danych, co poprawia wydajność.
     *
     * Ze względu na to, że zapytaniu budujemy samodzielnie sklejając kawałki tekstu, stwarzamy zagrożenie SQL Injection.
     * Przykładowe dane powodujące SQL injection:
	 * a';UPDATE employees SET salary = 50000 WHERE last_name='Hunold'; SELECT '
	 * a'; DROP TABLE employees CASCADE; SELECT '
	 */
	public static void main(String[] args) {
		String szukany_job = JOptionPane.showInputDialog("Podaj kod stanowiska");
		try(Connection c = DriverManager.getConnection("jdbc:postgresql://localhost/hr", "kurs", "abc123")) {
			try(PreparedStatement stmt = c.prepareStatement("SELECT * FROM employees WHERE job_id = '" + szukany_job + "'")) {
				System.out.println("Zaraz wykonam: " + stmt);
				try(ResultSet rs = stmt.executeQuery()) {
					while (rs.next()) {
						int id = rs.getInt(1);
						String imie = rs.getString("first_name");
						String nazwisko = rs.getString("last_name");
						String job = rs.getString("job_id");
						BigDecimal pensja = rs.getBigDecimal("sal-ary");
						java.sql.Date data = rs.getDate("hire_date");
						System.out.printf("%d. %s %s (%s) zatr. %s zarabia %s\n", id, imie, nazwisko, job, data, pensja);
					}
				}
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

}
