· 10 years ago · May 03, 2016, 04:03 PM
1package bazydanychbiblioteka;
2import java.sql.Connection;
3import java.sql.DriverManager;
4import java.sql.Statement;
5import java.sql.SQLException;
6import java.sql.PreparedStatement;
7import java.util.List;
8import java.util.LinkedList;
9import java.sql.ResultSet;
10public class Biblioteka {
11 public static final String DRIVER = "org.sqlite.JDBC";
12 public static final String DB_URL = "jdbc:sqlite:biblioteka.db";
13 private Connection conn;
14 private Statement stat;
15 public Biblioteka(){
16 try{
17 Class.forName(Biblioteka.DRIVER); // zwraca obiekt class zwiÄ…zany z podanÄ… klasÄ…
18 // próbuje utworzyć obiekt klasy, jeśli się nie da to znaczy że brak sterownika
19 // inaczej mówiąc ta linijka jest odpowiedzialna za załadowanie sterownika do systemu
20 }catch(ClassNotFoundException e){
21 System.err.println("Brak sterownika JDBC");
22 e.printStackTrace();
23 }
24 try{
25 conn = DriverManager.getConnection(DB_URL); // próbuje nawiązać połączenie z adresem url bazy danych
26 /* jak widać w adresie tym są podane zarówno typ bazy danych, jak i jej nazwa.
27 Gdyby była to baza MySQL to ten String mógłby wyglądać tak: jdbc:mysql:sciezkaDoBazyDanychMySQL */
28 stat = conn.createStatement(); // tworzy obiekt komunikatu, służący do wysyłania zapytań SQL do bazy danych
29 }catch(SQLException e){
30 System.err.println("Problem z otwarciem połączenia");
31 e.printStackTrace();
32 }
33 createTables();
34 }
35 public boolean createTables(){
36 String createCzytelnicy = "CREATE TABLE IF NOT EXISTS czytelnicy (id_czytelnika INTEGER PRIMARY KEY AUTOINCREMENT, imie varchar(255), nazwisko varchar(255), pesel varchar(255))";
37 String createKsiazki = "CREATE TABLE IF NOT EXISTS ksiazki(id_ksiazki INTEGER PRIMARY KEY AUTOINCREMENT, tytul varchar(255), autor varchar(255))";
38 String createWypozyczenia = "CREATE TABLE IF NOT EXISTS wypozyczenia (id_wypozycz INTEGER PRIMARY KEY AUTOINCREMENT, id_czytelnika int, id_ksiazki int)";
39 try{
40 stat.execute(createCzytelnicy); // wykonuje instrukcjÄ™ SQL
41 stat.execute(createKsiazki);
42 stat.execute(createWypozyczenia);
43 }catch(SQLException e){
44 System.err.println("Błąd przy tworzeniu tabeli");
45 e.printStackTrace();
46 return false;
47 }
48 return true;
49 }
50 public boolean insertCzytelnik(String imie, String nazwisko, String pesel){
51 try{
52 PreparedStatement prepStmt = conn.prepareStatement("insert into czytelnicy values (NULL, ?, ?, ?);");
53 // tworzy obiekt gotowego zapytania, który służy do wysyłania sparametryzowanych zapytań SQL do bazy danych
54 prepStmt.setString(1, imie); // ustawia wyznaczony parametr (wstawia go w miejsce ?)
55 prepStmt.setString(2, nazwisko);
56 prepStmt.setString(3, pesel);
57 prepStmt.execute();
58 }catch(SQLException e){
59 System.err.println("Błąd przy wstawianiu czytelnika");
60 e.printStackTrace();
61 return false;
62 }
63 return true;
64 }
65 public boolean insertKsiazka(String tytul, String autor){
66 try{
67 PreparedStatement prepStmt = conn.prepareStatement("insert into ksiazki values (NULL, ?, ?);");
68 prepStmt.setString(1, tytul);
69 prepStmt.setString(2, autor);
70 prepStmt.execute();
71 }catch(SQLException e){
72 System.err.println("Błąd przy wypozyczaniu");
73 e.printStackTrace();
74 return false;
75 }
76 return true;
77 }
78 public boolean insertWypozycz(int idCzytelnik, int idKsiazka){
79 try{
80 PreparedStatement prepStmt = conn.prepareStatement("insert into wypozyczenia values (NULL, ?, ?);");
81 prepStmt.setInt(1, idCzytelnik);
82 prepStmt.setInt(2, idKsiazka);
83 prepStmt.execute();
84 }catch(SQLException e){
85 System.err.println("Błąd przy wypozyczaniu");
86 return false;
87 }
88 return true;
89 }
90 public List<Czytelnik> selectCzytelnicy(){
91 List<Czytelnik> czytelnicy = new LinkedList();
92 try{
93 ResultSet result = stat.executeQuery("SELECT * FROM czytelnicy");
94 /* zwraca obiekt typu ResultSet, który zawiera odpowiedzi na podane zapytanie.
95 Mimo nazwy obiekt ten przypomina bardziej tabelę niż zbiór. Początek jest ustawiony na pierwszym wierszu. */
96 int id;
97 String imie, nazwisko, pesel;
98 while(result.next()){ // przechodzi do kolejnego rzędu (wiersza) i jeśli się nie da to zwraca false
99 id = result.getInt("id_czytelnika"); // pobiera wartość typu int
100 imie = result.getString("imie");
101 nazwisko = result.getString("nazwisko");
102 pesel = result.getString("pesel");
103 czytelnicy.add(new Czytelnik(id, imie, nazwisko, pesel));
104 }
105 }catch(SQLException e){
106 e.printStackTrace();
107 return null;
108 }
109 return czytelnicy;
110 }
111 public List<Ksiazka> selectKsiazki(){
112 List<Ksiazka> ksiazki = new LinkedList();
113 try{
114 ResultSet result = stat.executeQuery("SELECT * FROM ksiazki");
115 int id;
116 String tytul, autor;
117 while(result.next()){
118 id = result.getInt("id_ksiazki");
119 tytul = result.getString("tytul");
120 autor = result.getString("autor");
121 ksiazki.add(new Ksiazka(id, tytul, autor));
122 }
123 }catch(SQLException e){
124 e.printStackTrace();
125 return null;
126 }
127 return ksiazki;
128 }
129 public void closeConnection(){
130 try{
131 conn.close(); // zamyka połączenie z bazą danych
132 }catch(SQLException e){
133 System.err.println("Problem z zamknięciem połączenia");
134 e.printStackTrace();
135 }
136 }
137}