Commit 3c30ac9e by Patryk Czarnik

zapytania z parametrami

parent 00274ce9
package zajecia;
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 OdczytajNiektorych_v1 {
// Wyświetl tylko pracowników, których job_id jest równy podanej wartości
// To rozwiązanie jest mało wydajne.
public static void main(String[] args) {
String url = "jdbc:postgresql://localhost:5432/hr";
try(Connection c = DriverManager.getConnection(url, "alx", "abc123")) {
String szukanyJob = JOptionPane.showInputDialog("Podaj job id", "IT_PROG");
try(PreparedStatement stmt = c.prepareStatement("SELECT * FROM employees ORDER BY employee_id");
ResultSet rs = stmt.executeQuery()) {
while(rs.next()) {
String job = rs.getString("job_id");
if(job.equals(szukanyJob)) {
System.out.printf("%s %s (%s), pensja %s\n", rs.getString("first_name"),
rs.getString("last_name"), job, rs.getBigDecimal("salary"));
}
}
}
System.out.println("To już koniec");
} catch(SQLException e) {
e.printStackTrace();
}
}
}
package zajecia;
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 OdczytajNiektorych_v2 {
// Wyświetl tylko pracowników, których job_id jest równy podanej wartości
// Ta wersja jest narażona na "SQL injection"
// Przykładowe kody, które można wpisać do okna, aby coś zepsuć:
// a'; UPDATE employees SET salary = 1; SELECT * FROM employees WHERE 'a' = 'a
// '; DROP TABLE employees CASCADE; SELECT '
public static void main(String[] args) {
String url = "jdbc:postgresql://localhost:5432/hr";
try(Connection c = DriverManager.getConnection(url, "alx", "abc123")) {
String szukanyJob = JOptionPane.showInputDialog("Podaj job id", "IT_PROG");
try(PreparedStatement stmt = c.prepareStatement("SELECT * FROM employees WHERE job_id = '" + szukanyJob + "' ORDER BY 1")) {
System.out.println(stmt);
try(ResultSet rs = stmt.executeQuery()) {
while(rs.next()) {
System.out.printf("%s %s (%s), pensja %s\n", rs.getString("first_name"),
rs.getString("last_name"), rs.getString("job_id"), rs.getBigDecimal("salary"));
}
}
}
System.out.println("To już koniec");
} catch(SQLException e) {
e.printStackTrace();
}
}
}
package zajecia;
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 OdczytajNiektorych_v3 {
// Wyświetl tylko pracowników, których job_id jest równy podanej wartości
// W tej wersji we właściwy sposób podstawiamy parametr do zapytania (poprzez znaki zapytania ?)
public static void main(String[] args) {
String url = "jdbc:postgresql://localhost:5432/hr";
try(Connection c = DriverManager.getConnection(url, "alx", "abc123")) {
String szukanyJob = JOptionPane.showInputDialog("Podaj job id", "IT_PROG");
try(PreparedStatement stmt = c.prepareStatement("SELECT * FROM employees WHERE job_id = ? ORDER BY 1")) {
stmt.setString(1, szukanyJob);
System.out.println(stmt);
try(ResultSet rs = stmt.executeQuery()) {
while(rs.next()) {
System.out.printf("%s %s (%s), pensja %s\n", rs.getString("first_name"),
rs.getString("last_name"), rs.getString("job_id"), rs.getBigDecimal("salary"));
}
}
}
System.out.println("To już koniec");
} catch(SQLException e) {
e.printStackTrace();
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment