Commit 53fbe75e by Patryk Czarnik

Pierwsze przykłady łączenie z postgresql.

parent 05c2619e
......@@ -10,4 +10,16 @@
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
</project>
<dependencies>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.5.0</version>
<scope>runtime</scope>
<!-- Zależność dodawana tylko na czas wykonania programu.
Do klas wchodzących w skład biblioteki nie wolno odwoływać się bezpośrednio w kodzie źródłowym.
-->
</dependency>
</dependencies>
</project>
\ No newline at end of file
package hello;
public class Hello {
public static void main(String[] args) {
System.out.println("Hello");
}
}
package zajecia.postgresql;
import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
// JDBC - Java Database Connectivity
// Podstawowy sposób łączenia się z SQL-owymi bazami danych w Javie.
// Umożliwia i wymaga pisania bezpośrednio komend SQL do wykonania.
// Daje ujednolicony interfejs programistyczny niezależny od rodzaju bazy danych.
// W Javie używa się głównie interfejsów, ale do projektu trzeba dodać STEROWNIK
// obsługujący konkretny rodzaj bazy danych - zawiera on implementacje tych interfejsów.
public class Odczyt1 {
public static void main(String[] args) {
try {
// Koncepcyjnie rzecz biorąc tworzymy obiekt takiej klasy:
// org.postgresql.jdbc.PgConnection c = new org.postgresql.jdbc.PgConnection(null, null, "jdbc:postgresql://localhost:5432/hr");
// Ale zapisuje się to w ten sposób, za pomocą klas i interfejsów, które są częścią ogólnego API JDBC
Connection c = DriverManager.getConnection("jdbc:postgresql://localhost:5432/hr", "kurs", "abc123");
System.out.println("Udało się połączyć, c = " + c);
// Statement to obiekt służący do wykonywania poleceń SQL.
Statement stmt = c.createStatement();
// execute - ogólne wykonanie jakiegoś kodu SQL
// executeQuery - wykonanie zapytania, które zwraca wynik, w praktyce: SELECT
ResultSet rs = stmt.executeQuery("SELECT * FROM employees");
System.out.println("Mam wyniki: " + rs);
System.out.println();
// ResultSet daje dostęp do wyników. Zgodnie z teorią SQL jest to "kursor", który pozwala przejrzeć wyniki.
// Jeśli chcemy odczytać wszystkie wiersze wynikowe, to typym zapisem jest taka pętla:
// rs.next() - próbuje przejść do nast wiersza i zwraca true, jeśli się udało, a false jeśli to już koniec danych
while(rs.next()) {
// w obrębie pętli za pomocą rs.getTYPDANYCH(KOLUMNA) odczytujemy wartości poszczególnych pól
// Można podać numer kolumny licząc od 1, albo nazwę.
int id = rs.getInt(1);
String firstName = rs.getString(2);
String lastName = rs.getString(3);
BigDecimal salary = rs.getBigDecimal("salary");
System.out.println("Pracownik nr " + id + ": " + firstName + " " + lastName + " zarabia " + salary);
}
// Połączenie należy zamknąć, ale "zamykalne" są też obiekty Statement i ResultSet.
// Prawidłowo zamykając wszystkie te obiekty możemy poprawić wydajność całej bazy danych.
rs.close();
stmt.close();
c.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
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;
public class Odczyt2 {
// W tej wersji:
// - stosujemy try-with-resources, aby prawidłowo zamknąć połączenie i pozostałe zasoby
// - zamiast Statement używamy PreparedStatement - wersja, w której zapytanie SQL podaje się wcześniej,
// w prepareStatement, a nie dopiero w executeQuery
// Jeden obiekt prepareStatement może być używany wielokrotnie; można przekazywać parametry, o czym później.
// - Podajemy nazwy kolumn, a nie numery.
public static void main(String[] args) {
try(Connection c = DriverManager.getConnection("jdbc:postgresql://localhost:5432/hr", "kurs", "abc123");
PreparedStatement stmt = c.prepareStatement("SELECT * FROM employees");
ResultSet rs = stmt.executeQuery()) {
while(rs.next()) {
int id = rs.getInt("employee_id");
String firstName = rs.getString("first_name");
String lastName = rs.getString("last_name");
BigDecimal salary = rs.getBigDecimal("salary");
System.out.println("Pracownik nr " + id + ": " + firstName + " " + lastName + " zarabia " + salary);
}
} 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