import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class JDBCTutorial {
public static void main(String [] args) throws SQLException{
/* Tutorial nawiazania polaczenia do bazy danych oraz wykonywania polecen SQL.
* W ponizszym tutorialu przedstawiam sposob na polaczenie z baza danych Oracle.
* W projekcie bedziemy wykorzystywac co prawda baze danych H2, ale sposob polaczenia
* w wypadku obu baz jest identyczny. Moim zdaniem latwiej bedzie wam zrozumiec
* mechanizmy JDBC przedstawione na tabelach, ktorych uzywamy na cwiczeniach z baz.
*
*
*/
try {
/* Dane do rejestracj klasy sterownika bazy danych. Istnieje
* alternatywna metoda
* polegajaca na odpowiednim skonfigurowaniu wlasciwosci jdbc.property, ale ta
* wydaje mi sie prostsza. Sterownik odpowiedni dla danej bazy danych powinien
* znajdowac sie na stronie jej producenta.
* Nalezy pamietac, zeby sciagnac sterownik odpowiedni dla naszej wersji javy.
*
*/
String driver ="oracle.jdbc.OracleDriver";
/*
* Ponizsze parametry to kolejno: adres, nazwa uzytkownika oraz haslo w
* bazie danych.
*/
String url ="jdbc:oracle:thin:@localhost";
String username = "pablo";
String password = "12345";
Connection conn=null;
/*
* Wyzej wspomniana rejestracja klasy sterownika
*/
Class.forName(driver) ;
/*
* Nawiazanie polaczenia z baza. Tutaj wykorzystalem inny sposob
* podawania danych
* dostepowych do bazy. Aby wykorzystac wyzej zdefiniowane stringi
* nalezy wywolac
* Driver.getConnection(url, username, password)
*
*/
conn = DriverManager.getConnection("jdbc:oracle:thin:pablo/12345@localhost:1521:XE");
/*
* Stworzenie obiektu wykorzystywanego do wykonywania zapytań i innych
* poleceń SQL
*/
Statement stat = conn.createStatement();
/*
* Wykonanie polecenie sql. Wynik bedziemy wam wszystkim bardzo dobrze
* znany z laboratorium BD.
* Obiekt ResultSet jest zwracany przez metode executeQuery()
* jako zbior wynikow
* zapytania SQL.
*/
ResultSet result = stat.executeQuery("SELECT * FROM EMP");
System.out.println("Empno | Ename | Job | Mgr | Hiredate | Sal | Comm | Deptno");
/*
* Petla umozliwiajaca pobranie wynikow zapytania powyzszego.
* ResultSet dziala na podobnej
* zasadzie co java.util.Iterator. Najwazniejsze informacje:
* Iterator klasy ResultSet znajduje sie poczatkowo na pozycji
* poprzedzajacej pierwszy wiersz.
* Aby przesunac go na pozycje pierwszego rekordu musimy wywolac
* metode next(). W przeciwienstwie
* do java.util.Iterator, klasa ta nie posiada hasNext().
* Dlatego tez wywolujemy ja do momentu, gdy zwroci false.
*/
while(result.next()){
/*
* Wyswietlenie wynikow w postaci lancuchow znakowych.
* WAZNE: indeksujemy od 1, a nie od 0!
* ISTOTNE: procz metod getString() ResultSet posiada inne metody
* przeznaczone do zwracania innych typow np. getDouble()
*/
System.out.println(result.getString(1) + " " + result.getString(2) + " " + result.getString(3) + " " + result.getString(4)+ " " + result.getString(5) + " " + result.getString(6) + " " + result.getString(7) + " " + result.getString(8));
}
result.close();
/*
* executeUpdate() - jest przeznaczona do wykonywania polecen jezyka
* SQL typu: INSERT, UPDATE, DELETE lub CREATE TABLE
*/
stat.executeUpdate("CREATE TABLE Tescik (Wiadomosc VARCHAR2(20))");
stat.executeUpdate("INSERT INTO Tescik (Wiadomosc) VALUES ('Hello')");
ResultSet result2 = stat.executeQuery("SELECT * FROM Tescik");
while(result2.next()){
System.out.println(result2.getString(1));
}
stat.executeUpdate("DROP TABLE Tescik");
/*
* zamkniecie obiektu zbiorow wynikow zapytania
*/
result.close();
result2.close();
/*
* zamkniecie polaczenia do bazy danych
*/
conn.close();
/*
* zamkniecie obiektu polecenia
*/
stat.close();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}