package zajecia.postgresql;

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 javax.swing.JOptionPane;

public class WypiszJob2 {
	/* 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 = 10 WHERE employee_id = 100; SELECT '
	 * '; drop table employees cascade; select '
	*/
	public static void main(String[] args) {
		String url = "jdbc:postgresql://localhost:5432/hr";
		try {
			Connection c = DriverManager.getConnection(url, "kurs", "abc123");
			
			String szukanyJob = JOptionPane.showInputDialog("Podaj kod stanowiska, np. IT_PROG");
			
			PreparedStatement stmt = c.prepareStatement("SELECT * FROM employees WHERE job_id = '" + szukanyJob + "'");
			System.out.println("Zaraz wykonam: " + stmt);
			ResultSet rs = stmt.executeQuery();
			
			while(rs.next()) {
				int id = rs.getInt(1);
				String firstName = rs.getString(2);
				String lastName = rs.getString(3);
				String job = rs.getString("job_id");
				BigDecimal salary = rs.getBigDecimal("salary");
				
				System.out.printf("Pracownik nr %d: %s %s (%s), zarabia %s\n",
					id, firstName, lastName, job, salary);
			}
			rs.close();
			stmt.close();
			c.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

}
