Commit fd341077 by Patryk Czarnik

OgloszeniaSerwer - gotowe klasy i dane

parent 51906a87
CREATE TABLE sprzedawcy (
id_sprzedawcy INTEGER PRIMARY KEY,
nazwa TEXT NOT NULL,
ulica TEXT,
kod_pocztowy TEXT,
miasto TEXT,
telefon TEXT,
email TEXT
);
CREATE TABLE ogloszenia (
id_ogloszenia INTEGER PRIMARY KEY,
id_sprzedawcy INTEGER REFERENCES sprzedawcy(id_sprzedawcy),
tytul TEXT,
data_wystawienia TEXT, -- w SQLite nie ma DATE / TIMESTAMP
cena REAL, -- w SQLite nie ma NUMBER
opis TEXT,
marka TEXT NOT NULL,
model TEXT NOT NULL,
generacja TEXT,
kolor TEXT,
rocznik INTEGER,
przebieg INTEGER,
pojemnosc REAL,
moc REAL,
paliwo TEXT
);
INSERT INTO sprzedawcy(id_sprzedawcy, nazwa, ulica, kod_pocztowy, miasto, telefon, email)
VALUES (1, 'Komis Bolka', 'Starocmentarna 5', '77-777', 'Wólka', '771231234', NULL);
INSERT INTO sprzedawcy(id_sprzedawcy, nazwa, ulica, kod_pocztowy, miasto, telefon, email)
VALUES (2, 'Auto jak nowe', 'Graniczna 13', '12-345', 'Pruszków', '666444333', 'auto@jaknowe.pl');
INSERT INTO sprzedawcy(id_sprzedawcy, nazwa, ulica, kod_pocztowy, miasto, telefon, email)
VALUES (3, 'Janusz Januszowski', 'Smutna', '56-654', 'Łódź', '987654321', NULL);
INSERT INTO ogloszenia(
id_ogloszenia, id_sprzedawcy, data_wystawienia, cena, tytul, opis, marka, model, generacja, kolor, rocznik, przebieg, pojemnosc, moc, paliwo)
VALUES (1, 1, '2017-10-10 20:20:00', 5500, 'Sprzedam Opla', 'Opel Astra V 1.4 jak nowy', 'Opel', 'Astra', 'K', 'brązowy', 2017, 150000, 1.4, 90, 'BENZYNA');
INSERT INTO ogloszenia(
id_ogloszenia, id_sprzedawcy, data_wystawienia, cena, tytul, opis, marka, model, generacja, kolor, rocznik, przebieg, pojemnosc, moc, paliwo)
VALUES (2, 2, '2017-10-20 07:21:12', 12000, 'Passat niebity igła', 'Ładny Passat TDI dla chłopaka z polskiej wsi', 'Volkswagen', 'Passat', 'C', 'srebrny', 2003, 179000, 2.0, 125, 'OLEJ');
INSERT INTO ogloszenia(
id_ogloszenia, id_sprzedawcy, data_wystawienia, cena, tytul, opis, marka, model, generacja, kolor, rocznik, przebieg, pojemnosc, moc, paliwo)
VALUES (3, 3, '2017-11-03 08:18:00', 3300, 'Złoty Matiz', NULL, 'Dewoo', 'Matiz', NULL, 'złoty', 1999, 123300, 1.0, 75, 'GAZ');
INSERT INTO ogloszenia(
id_ogloszenia, id_sprzedawcy, data_wystawienia, cena, tytul, opis, marka, model, generacja, kolor, rocznik, przebieg, pojemnosc, moc, paliwo)
VALUES (4, 1, '2017-10-29 12:12:00', 17000, 'Meganka prosto z Francji', 'Mało jeżdżone, niepalone, opłaca się!', 'Renault', 'Megane', 'II', 'biały', 2009, 130000, 1.9, 130, 'OLEJ');
INSERT INTO ogloszenia(
id_ogloszenia, id_sprzedawcy, data_wystawienia, cena, tytul, opis, marka, model, generacja, kolor, rocznik, przebieg, pojemnosc, moc, paliwo)
VALUES (5, 1, '2017-10-27 12:12:00', 99999, 'Mazda szósteczka nówka', 'Prosto z warszawskiej ulicy...', 'Mazda', '6', 'III', 'czerwony', 2015, 8000, 2.0, 150, 'BENZYNA');
INSERT INTO ogloszenia(
id_ogloszenia, id_sprzedawcy, data_wystawienia, cena, tytul, opis, marka, model, generacja, kolor, rocznik, przebieg, pojemnosc, moc, paliwo)
VALUES (6, 2, '2017-08-22 08:00:00', 12500, 'Fiacik', NULL, 'Fiat', 'Punto', '2', 'niebieski', 2005, 87000, 1.2, 82, 'GAZ');
INSERT INTO ogloszenia(
id_ogloszenia, id_sprzedawcy, data_wystawienia, cena, tytul, opis, marka, model, generacja, kolor, rocznik, przebieg, pojemnosc, moc, paliwo)
VALUES (7, 3, '2017-09-01 21:21:21', 18200, 'Yaris od kobiety', 'Sprzedam używaną Yariskę', 'Toyota', 'Yaris', 'III', 'srebrny', 2013, 113100, 1.4, 100, 'BENZYNA');
package ogloszenia;
/** W tej klasie trzeba wpisać swoje ustawienia ścieżek. */
public class Ustawienia {
public static final String SQLITE_PATH = "/home/patryk/ogloszenia/ogloszenia.db";
public static final String PHOTOS_PATH = "/home/patryk/ogloszenia/foto";
}
package ogloszenia.baza.sqlite;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import ogloszenia.Ustawienia;
import ogloszenia.baza.sqlite.OgloszenieDAO;
import ogloszenia.baza.sqlite.SprzedawcaDAO;
import ogloszenia.exn.BladBazyDanych;
public class DostepDoBazySqlite implements AutoCloseable {
private Connection c;
DostepDoBazySqlite(Connection con) {
c = con;
}
public static DostepDoBazySqlite newSQLite(String sqliteFile) throws BladBazyDanych {
try {
Class.forName("org.sqlite.JDBC");
Connection con = DriverManager.getConnection("jdbc:sqlite:" + sqliteFile);
return new DostepDoBazySqlite(con);
} catch (Exception e) {
throw new BladBazyDanych("Błąd podczas otwierania bazy danych ("+e.getMessage()+")", e);
}
}
public static DostepDoBazySqlite newSQLite() throws BladBazyDanych {
return newSQLite(Ustawienia.SQLITE_PATH);
}
@Override
public void close() {
try {
if(c != null)
c.close();
} catch (SQLException e) {
System.err.println("Błąd podczas close: " + e.getMessage());
}
}
Connection c() {
return c;
}
public void beginTransaction() throws BladBazyDanych {
try {
c.setAutoCommit(false);
//c.setTransactionIsolation(Connection.TRANSACTION_REPEATABLE_READ);
} catch (SQLException e) {
throw new BladBazyDanych("beginTransaction: " + e.getMessage(), e);
}
}
public void endTransaction(boolean commit) throws BladBazyDanych {
try {
if(commit) {
c.commit();
} else {
c.rollback();
}
c.setAutoCommit(true);
} catch (SQLException e) {
throw new BladBazyDanych("endTransaction: " + e.getMessage(), e);
}
}
public OgloszenieDAO newOgloszenieDAO() {
return new OgloszenieDAO(this);
}
public SprzedawcaDAO newSprzedawcaDAO() {
return new SprzedawcaDAO(this);
}
}
package ogloszenia.baza.sqlite;
import java.time.LocalDateTime;
import ogloszenia.model.Paliwo;
public class Konwersje {
public static LocalDateTime dateFromString(String s) {
return s == null ? null : LocalDateTime.parse(s.replace(' ', 'T'));
}
public static String dateToString(LocalDateTime localDateTime) {
return localDateTime == null ? null : localDateTime.toString().replace('T', ' ');
}
public static Paliwo paliwoFromString(String s) {
return s == null ? null : Paliwo.valueOf(s.trim().toUpperCase());
}
public static String paliwoToString(Paliwo paliwo) {
return paliwo == null ? null : paliwo.toString();
}
}
package ogloszenia.baza.sqlite;
import java.math.BigDecimal;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.time.LocalDateTime;
import java.util.LinkedList;
import java.util.List;
import ogloszenia.exn.BladBazyDanych;
import ogloszenia.exn.NieznanyRekord;
import ogloszenia.model.Ogloszenie;
import ogloszenia.model.OgloszenieSamochodowe;
import ogloszenia.model.Silnik;
import ogloszenia.model.Sprzedawca;
public class OgloszenieDAO {
private DostepDoBazySqlite db;
OgloszenieDAO(DostepDoBazySqlite db) {
this.db = db;
}
public DostepDoBazySqlite getDBHandler() {
return db;
}
public List<Integer> idList() throws BladBazyDanych {
final String sql = "SELECT id_ogloszenia FROM ogloszenia ORDER BY id_ogloszenia";
List<Integer> lista = new LinkedList<>();
try(PreparedStatement stmt = db.c().prepareStatement(sql)) {
try(ResultSet rs = stmt.executeQuery()) {
while(rs.next()) {
lista.add(rs.getInt(1));
}
}
} catch (SQLException e) {
throw new BladBazyDanych("listaIdOgloszen: "+e.getMessage(), e);
}
return lista;
}
public OgloszenieSamochodowe findById(int idOgloszenia, boolean full) throws BladBazyDanych, NieznanyRekord {
final String sql = "SELECT * FROM ogloszenia WHERE id_ogloszenia = ?";
try(PreparedStatement stmt = db.c().prepareStatement(sql)) {
stmt.setInt(1, idOgloszenia);
try(ResultSet rs = stmt.executeQuery()) {
if(rs.next()) {
OgloszenieSamochodowe ogl = ogloszenieZResultSet(rs);
if(full) {
doczytajSprzedawce(ogl);
}
return ogl;
} else {
throw new NieznanyRekord("Nieznane ogloszenie " + idOgloszenia);
}
}
} catch (SQLException e) {
throw new BladBazyDanych("Ogloszenie byIdFull: "+e.getMessage(), e);
}
}
public OgloszenieSamochodowe findById(int idOgloszenia) throws BladBazyDanych, NieznanyRekord {
return findById(idOgloszenia, false);
}
public OgloszenieSamochodowe findByIdFull(int idOgloszenia) throws BladBazyDanych, NieznanyRekord {
return findById(idOgloszenia, true);
}
public List<OgloszenieSamochodowe> readAll(boolean full) throws BladBazyDanych {
final String sql = "SELECT * FROM ogloszenia";
List<OgloszenieSamochodowe> lista = new LinkedList<>();
try(PreparedStatement stmt = db.c().prepareStatement(sql)) {
try(ResultSet rs = stmt.executeQuery()) {
while(rs.next()) {
OgloszenieSamochodowe ogl = ogloszenieZResultSet(rs);
if(full) try {
doczytajSprzedawce(ogl);
} catch (NieznanyRekord e) {
System.err.println(e);
}
lista.add(ogl);
}
}
} catch (SQLException e) {
throw new BladBazyDanych("Ogloszenie readAll: "+e.getMessage(), e);
}
return lista;
}
public List<OgloszenieSamochodowe> readAll() throws BladBazyDanych {
return readAll(false);
}
public List<OgloszenieSamochodowe> readAllFull() throws BladBazyDanych {
return readAll(true);
}
public List<OgloszenieSamochodowe> ogloszeniaWedlugCeny(BigDecimal cenaOd, BigDecimal cenaDo) throws BladBazyDanych {
final String sql = "SELECT * FROM ogloszenia"
+ " WHERE cena BETWEEN ? AND ?"
+ " ORDER BY id_ogloszenia";
if(cenaOd == null)
cenaOd = BigDecimal.ZERO;
if(cenaDo == null)
cenaDo = new BigDecimal(100000000);
List<OgloszenieSamochodowe> lista = new LinkedList<>();
try(PreparedStatement stmt = db.c().prepareStatement(sql)) {
stmt.setBigDecimal(1, cenaOd);
stmt.setBigDecimal(2, cenaDo);
try(ResultSet rs = stmt.executeQuery()) {
while(rs.next()) {
OgloszenieSamochodowe ogl = ogloszenieZResultSet(rs);
try {
doczytajSprzedawce(ogl);
} catch (NieznanyRekord e) {
e.printStackTrace();
}
lista.add(ogl);
}
}
} catch (SQLException e) {
throw new BladBazyDanych("Błąd bazy w metodzie ogloszeniaWedlugCeny: " + e.getMessage(), e);
}
return lista;
}
public List<OgloszenieSamochodowe> ogloszeniaSprzedawcy(int idSprzedawcy) throws BladBazyDanych {
final String sql = "SELECT * FROM ogloszenia WHERE id_sprzedawcy = ?";
List<OgloszenieSamochodowe> lista = new LinkedList<>();
try(PreparedStatement stmt = db.c().prepareStatement(sql)) {
stmt.setInt(1, idSprzedawcy);
try(ResultSet rs = stmt.executeQuery()) {
while(rs.next()) {
lista.add(ogloszenieZResultSet(rs));
}
}
} catch (SQLException e) {
throw new BladBazyDanych("ogloszeniaSprzedawcy: "+e.getMessage(), e);
}
return lista;
}
public List<Integer> listaIdOgloszenSprzedawcy(int idSprzedawcy) throws BladBazyDanych {
final String sql = "SELECT id_ogloszenia FROM ogloszenia WHERE id_sprzedawcy = ?";
List<Integer> lista = new LinkedList<>();
try(PreparedStatement stmt = db.c().prepareStatement(sql)) {
stmt.setInt(1, idSprzedawcy);
try(ResultSet rs = stmt.executeQuery()) {
while(rs.next()) {
lista.add(rs.getInt(1));
}
}
} catch (SQLException e) {
throw new BladBazyDanych("listaIdOgloszenSprzedawcy: "+e.getMessage(), e);
}
return lista;
}
public void save(OgloszenieSamochodowe ogl) throws BladBazyDanych {
if(ogl.getIdOgloszenia() == null) {
// wstawiamy nowy rekord korzystajac z autoincrement
insertNew(ogl);
} else if(! update(ogl)) {
insert(ogl);
}
}
public boolean insert(OgloszenieSamochodowe ogl) throws BladBazyDanych {
uzupelnijDate(ogl);
final String sql = "INSERT INTO ogloszenia("
+ " id_ogloszenia, id_sprzedawcy, data_wystawienia, cena, tytul, opis,"
+ " marka, model, generacja, kolor, rocznik, przebieg, pojemnosc, moc, paliwo)"
+ " VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
try(PreparedStatement stmt = db.c().prepareStatement(sql)) {
stmt.setInt(1, ogl.getIdOgloszenia());
stmt.setInt(2, ogl.getIdSprzedawcy());
stmt.setString(3, Konwersje.dateToString(ogl.getDataWystawienia()));
stmt.setBigDecimal(4, ogl.getCena());
stmt.setString(5, ogl.getTytul());
stmt.setString(6, ogl.getOpis());
stmt.setString(7, ogl.getMarka());
stmt.setString(8, ogl.getModel());
stmt.setString(9, ogl.getGeneracja());
stmt.setString(10, ogl.getKolor());
stmt.setInt(11, ogl.getRocznik());
stmt.setInt(12, ogl.getPrzebieg());
Silnik silnik = ogl.getSilnik();
if(silnik != null) {
stmt.setFloat(13, silnik.getMoc());
stmt.setFloat(14, silnik.getPojemnosc());
stmt.setString(15, Konwersje.paliwoToString(silnik.getPaliwo()));
}
int ile = stmt.executeUpdate();
return (ile > 0);
} catch (SQLException e) {
throw new BladBazyDanych("Ogloszenie insert: "+e.getMessage(), e);
}
}
public int insertNew(OgloszenieSamochodowe ogl) throws BladBazyDanych {
uzupelnijDate(ogl);
final String sql = "INSERT INTO ogloszenia("
+ " id_sprzedawcy, data_wystawienia, cena, tytul, opis, marka, model, generacja, kolor, rocznik, przebieg, pojemnosc, moc, paliwo)"
+ " VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
try {
try(PreparedStatement stmt = db.c().prepareStatement(sql)) {
stmt.setInt(1, ogl.getIdSprzedawcy());
stmt.setString(2, Konwersje.dateToString(ogl.getDataWystawienia()));
stmt.setBigDecimal(3, ogl.getCena());
stmt.setString(4, ogl.getTytul());
stmt.setString(5, ogl.getOpis());
stmt.setString(6, ogl.getMarka());
stmt.setString(7, ogl.getModel());
stmt.setString(8, ogl.getGeneracja());
stmt.setString(9, ogl.getKolor());
stmt.setInt(10, ogl.getRocznik());
stmt.setInt(11, ogl.getPrzebieg());
Silnik silnik = ogl.getSilnik();
if(silnik != null) {
stmt.setFloat(12, silnik.getPojemnosc());
stmt.setFloat(13, silnik.getMoc());
stmt.setString(14, Konwersje.paliwoToString(silnik.getPaliwo()));
}
int ile = stmt.executeUpdate();
if(ile == 0) {
throw new SQLException("Nie mogę wstawić nowego rekordu ogloszenie");
}
}
try(Statement stmt = db.c().createStatement();
ResultSet rs = stmt.executeQuery("SELECT last_insert_rowid()")) {
if(rs.next()) {
int noweId = rs.getInt(1);
ogl.setIdOgloszenia(noweId);
return noweId;
} else {
throw new SQLException("Nie mogę pobrać id nowego rekordu ogloszenie");
}
}
} catch (SQLException e) {
throw new BladBazyDanych("Ogloszenie insertNew: "+e.getMessage(), e);
}
}
public boolean update(OgloszenieSamochodowe ogl) throws BladBazyDanych {
final String sql = "UPDATE ogloszenia SET id_sprzedawcy=?, data_wystawienia=?, cena=?,"
+ " tytul=?, opis=?, marka=?, model=?, generacja=?,"
+ " kolor=?, rocznik=?, przebieg=?, pojemnosc=?, moc=?, paliwo=?"
+ " WHERE id_ogloszenia=?";
try(PreparedStatement stmt = db.c().prepareStatement(sql)) {
stmt.setInt(1, ogl.getIdSprzedawcy());
stmt.setString(2, Konwersje.dateToString(ogl.getDataWystawienia()));
stmt.setBigDecimal(3, ogl.getCena());
stmt.setString(4, ogl.getTytul());
stmt.setString(5, ogl.getOpis());
stmt.setString(6, ogl.getMarka());
stmt.setString(7, ogl.getModel());
stmt.setString(8, ogl.getGeneracja());
stmt.setString(9, ogl.getKolor());
stmt.setInt(10, ogl.getRocznik());
stmt.setInt(11, ogl.getPrzebieg());
Silnik silnik = ogl.getSilnik();
if(silnik != null) {
stmt.setFloat(12, silnik.getPojemnosc());
stmt.setFloat(13, silnik.getMoc());
stmt.setString(14, Konwersje.paliwoToString(silnik.getPaliwo()));
}
stmt.setInt(15, ogl.getIdOgloszenia());
int ile = stmt.executeUpdate();
return (ile > 0);
} catch (SQLException e) {
throw new BladBazyDanych("Ogloszenie update: "+e.getMessage(), e);
}
}
public void zmienCene(int idOgloszenia, BigDecimal nowaCena)
throws BladBazyDanych, NieznanyRekord {
final String sql = "UPDATE ogloszenia SET cena=?"
+ " WHERE id_ogloszenia=?";
try(PreparedStatement stmt = db.c().prepareStatement(sql)) {
stmt.setBigDecimal(1, nowaCena);
stmt.setInt(2, idOgloszenia);
int ile = stmt.executeUpdate();
if(ile == 0) {
throw new NieznanyRekord("Nieznane ogloszenie " + idOgloszenia);
}
} catch (SQLException e) {
throw new BladBazyDanych("Ogloszenie zmienCene: "+e.getMessage(), e);
}
}
public void delete(int idOgloszenia)
throws BladBazyDanych, NieznanyRekord {
final String sql = "DELETE FROM ogloszenia WHERE id_ogloszenia=?";
try(PreparedStatement stmt = db.c().prepareStatement(sql)) {
stmt.setInt(1, idOgloszenia);
int ile = stmt.executeUpdate();
if(ile == 0) {
throw new NieznanyRekord("Nieznane ogloszenie " + idOgloszenia);
}
} catch (SQLException e) {
throw new BladBazyDanych("Ogloszenie delete: "+e.getMessage(), e);
}
}
private OgloszenieSamochodowe ogloszenieZResultSet(ResultSet rs) throws SQLException {
Silnik silnik = new Silnik(rs.getFloat("moc"),
rs.getFloat("pojemnosc"),
Konwersje.paliwoFromString(rs.getString("paliwo")));
return new OgloszenieSamochodowe(
rs.getInt("id_ogloszenia"),
rs.getInt("id_sprzedawcy"),
Konwersje.dateFromString(rs.getString("data_wystawienia")),
rs.getBigDecimal("cena"),
rs.getString("tytul"),
rs.getString("opis"),
rs.getString("marka"),
rs.getString("model"),
rs.getString("generacja"),
rs.getString("kolor"),
rs.getInt("rocznik"),
rs.getInt("przebieg"),
silnik
);
}
void doczytajSprzedawce(Ogloszenie ogl) throws BladBazyDanych, NieznanyRekord {
SprzedawcaDAO sDao = db.newSprzedawcaDAO();
Sprzedawca sprzedawca = sDao.findById(ogl.getIdSprzedawcy());
ogl.setSprzedawca(sprzedawca);
}
private void uzupelnijDate(OgloszenieSamochodowe ogl) {
if(ogl.getDataWystawienia() == null) {
ogl.setDataWystawienia(LocalDateTime.now());
}
}
}
package ogloszenia.baza.sqlite;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedList;
import java.util.List;
import ogloszenia.exn.BladBazyDanych;
import ogloszenia.exn.NieznanyRekord;
import ogloszenia.model.Adres;
import ogloszenia.model.Sprzedawca;
public class SprzedawcaDAO {
private DostepDoBazySqlite db;
SprzedawcaDAO(DostepDoBazySqlite db) {
this.db = db;
}
public DostepDoBazySqlite getDBHandler() {
return db;
}
public List<Integer> idList() throws BladBazyDanych {
final String sql = "SELECT id_sprzedawcy FROM sprzedawcy";
List<Integer> lista = new LinkedList<>();
try(PreparedStatement stmt = db.c().prepareStatement(sql)) {
try(ResultSet rs = stmt.executeQuery()) {
while(rs.next()) {
lista.add(rs.getInt(1));
}
}
} catch (SQLException e) {
throw new BladBazyDanych("listaIdSprzedawcow: "+e.getMessage(), e);
}
return lista;
}
public Sprzedawca findById(int idSprzedawcy) throws BladBazyDanych, NieznanyRekord {
final String sql = "SELECT * FROM sprzedawcy WHERE id_sprzedawcy = ?";
try(PreparedStatement stmt = db.c().prepareStatement(sql)) {
stmt.setInt(1, idSprzedawcy);
try(ResultSet rs = stmt.executeQuery()) {
if(rs.next()) {
return sprzedawcaZResultSet(rs);
} else {
throw new NieznanyRekord("Nieznany sprzedawca " + idSprzedawcy);
}
}
} catch (SQLException e) {
throw new BladBazyDanych("Sprzedawca byId: "+e.getMessage(), e);
}
}
public List<Sprzedawca> readAll() throws BladBazyDanych {
final String sql = "SELECT * FROM sprzedawcy";
List<Sprzedawca> lista = new LinkedList<>();
try(PreparedStatement stmt = db.c().prepareStatement(sql)) {
try(ResultSet rs = stmt.executeQuery()) {
while(rs.next()) {
lista.add(sprzedawcaZResultSet(rs));
}
}
} catch (SQLException e) {
throw new BladBazyDanych("Sprzedawca readAll: "+e.getMessage(), e);
}
return lista;
}
private Sprzedawca sprzedawcaZResultSet(ResultSet rs) throws SQLException {
Adres adres = new Adres(rs.getString("ulica"),
rs.getString("kod_pocztowy"), rs.getString("miasto"));
return new Sprzedawca(
rs.getInt("id_sprzedawcy"), rs.getString("nazwa"),
adres, rs.getString("telefon"), rs.getString("email")
);
}
}
package ogloszenia.baza.sqlite;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import ogloszenia.Ustawienia;
public class UtworzBaze {
public static void main(String[] args) {
String skrypt = "";
try {
skrypt = String.join("\n", Files.readAllLines(Paths.get("ogloszenia_sqlite.sql")));
if(Files.deleteIfExists(Paths.get(Ustawienia.SQLITE_PATH))) {
System.out.println("Usunięto plik " + Ustawienia.SQLITE_PATH);
}
} catch (IOException e) {
System.err.println("Błąd podczas przygotowania plików: " + e);
}
String[] poleceniaSkryptu = skrypt.split("\\s*;\\s*");
System.out.println("Otwarcie pliku z bazą...");
try(Connection c = DriverManager.getConnection("jdbc:sqlite:" + Ustawienia.SQLITE_PATH);
Statement stmt = c.createStatement()) {
c.setAutoCommit(false);
System.out.println("Wgrywam dane");
for(String sql : poleceniaSkryptu) {
stmt.addBatch(sql);
System.out.print(".");
System.out.flush();
}
stmt.executeBatch();
c.commit();
System.out.println("\nGotowe");
} catch (SQLException e) {
System.err.println("Błąd podczas wgrywania danych: " + e);
e.printStackTrace();
}
}
}
package ogloszenia.exn;
public class BladAplikacji extends Exception {
public BladAplikacji() {
super();
}
public BladAplikacji(String message, Throwable cause) {
super(message, cause);
}
public BladAplikacji(String message) {
super(message);
}
public BladAplikacji(Throwable cause) {
super(cause);
}
}
package ogloszenia.exn;
public class BladBazyDanych extends BladAplikacji {
public BladBazyDanych() {
super();
}
public BladBazyDanych(String message, Throwable cause) {
super(message, cause);
}
public BladBazyDanych(String message) {
super(message);
}
public BladBazyDanych(Throwable cause) {
super(cause);
}
}
package ogloszenia.exn;
public class NieznanyRekord extends BladAplikacji {
public NieznanyRekord() {
super();
}
public NieznanyRekord(String message) {
super(message);
}
}
package ogloszenia.model;
public class Adres {
private String ulica;
private String kodPocztowy;
private String miasto;
public Adres() {
}
public Adres(String ulica, String kodPocztowy, String miasto) {
this.ulica = ulica;
this.kodPocztowy = kodPocztowy;
this.miasto = miasto;
}
public String getUlica() {
return ulica;
}
public String getKodPocztowy() {
return kodPocztowy;
}
public String getMiasto() {
return miasto;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((kodPocztowy == null) ? 0 : kodPocztowy.hashCode());
result = prime * result + ((miasto == null) ? 0 : miasto.hashCode());
result = prime * result + ((ulica == null) ? 0 : ulica.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Adres other = (Adres) obj;
if (kodPocztowy == null) {
if (other.kodPocztowy != null)
return false;
} else if (!kodPocztowy.equals(other.kodPocztowy))
return false;
if (miasto == null) {
if (other.miasto != null)
return false;
} else if (!miasto.equals(other.miasto))
return false;
if (ulica == null) {
if (other.ulica != null)
return false;
} else if (!ulica.equals(other.ulica))
return false;
return true;
}
@Override
public String toString() {
return String.format("%s, %s %s", ulica, kodPocztowy, miasto);
}
}
package ogloszenia.model;
import java.util.List;
public class ListaOgloszen {
public List<OgloszenieSamochodowe> ogloszenia;
public static ListaOgloszen nowa(List<OgloszenieSamochodowe> ogloszenia) {
ListaOgloszen lista = new ListaOgloszen();
lista.ogloszenia = ogloszenia;
return lista;
}
}
package ogloszenia.model;
import java.math.BigDecimal;
import java.time.LocalDateTime;
public class Ogloszenie {
private Integer idOgloszenia;
private Integer idSprzedawcy;
private LocalDateTime dataWystawienia;
private BigDecimal cena;
private String tytul;
private String opis;
private Sprzedawca sprzedawca;
public Ogloszenie() {
}
public Ogloszenie(Integer idOgloszenia, Integer idSprzedawcy, LocalDateTime dataWystawienia, BigDecimal cena, String tytul, String opis) {
this.idOgloszenia = idOgloszenia;
this.idSprzedawcy = idSprzedawcy;
this.dataWystawienia = dataWystawienia;
this.cena = cena;
this.tytul = tytul;
this.opis = opis;
}
/** Pozostawia pole sprzedawca równe null. */
public Ogloszenie(Integer idOgloszenia, LocalDateTime dataWystawienia, BigDecimal cena, String tytul, String opis) {
this.idOgloszenia = idOgloszenia;
this.dataWystawienia = dataWystawienia;
this.cena = cena;
this.tytul = tytul;
this.opis = opis;
this.idSprzedawcy = null;
}
/** Wartość idSprzedawcy pobiera z obiektu sprzedawca. */
public Ogloszenie(Integer idOgloszenia, Sprzedawca sprzedawca, LocalDateTime dataWystawienia, BigDecimal cena, String tytul, String opis) {
this.idOgloszenia = idOgloszenia;
this.dataWystawienia = dataWystawienia;
this.cena = cena;
this.tytul = tytul;
this.opis = opis;
this.sprzedawca = sprzedawca;
if(sprzedawca != null) {
this.idSprzedawcy = sprzedawca.getIdSprzedawcy();
}
}
public Integer getIdOgloszenia() {
return idOgloszenia;
}
public void setIdOgloszenia(Integer noweId) {
this.idOgloszenia = noweId;
}
public String getTytul() {
return tytul;
}
public BigDecimal getCena() {
return cena;
}
public Integer getIdSprzedawcy() {
return idSprzedawcy;
}
public Sprzedawca getSprzedawca() {
return sprzedawca;
}
public void setSprzedawca(Sprzedawca sprzedawca) {
this.sprzedawca = sprzedawca;
}
public String getOpis() {
return opis;
}
public void setOpis(String opis) {
this.opis = opis;
}
public void setCena(BigDecimal cena) {
this.cena = cena;
}
public LocalDateTime getDataWystawienia() {
return dataWystawienia;
}
public void setDataWystawienia(LocalDateTime dataWystawienia) {
this.dataWystawienia = dataWystawienia;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((cena == null) ? 0 : cena.hashCode());
result = prime * result + ((dataWystawienia == null) ? 0 : dataWystawienia.hashCode());
result = prime * result + ((idOgloszenia == null) ? 0 : idOgloszenia.hashCode());
result = prime * result + ((idSprzedawcy == null) ? 0 : idSprzedawcy.hashCode());
result = prime * result + ((opis == null) ? 0 : opis.hashCode());
result = prime * result + ((sprzedawca == null) ? 0 : sprzedawca.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Ogloszenie other = (Ogloszenie) obj;
if (cena == null) {
if (other.cena != null)
return false;
} else if (!cena.equals(other.cena))
return false;
if (dataWystawienia == null) {
if (other.dataWystawienia != null)
return false;
} else if (!dataWystawienia.equals(other.dataWystawienia))
return false;
if (idOgloszenia == null) {
if (other.idOgloszenia != null)
return false;
} else if (!idOgloszenia.equals(other.idOgloszenia))
return false;
if (idSprzedawcy == null) {
if (other.idSprzedawcy != null)
return false;
} else if (!idSprzedawcy.equals(other.idSprzedawcy))
return false;
if (opis == null) {
if (other.opis != null)
return false;
} else if (!opis.equals(other.opis))
return false;
if (sprzedawca == null) {
if (other.sprzedawca != null)
return false;
} else if (!sprzedawca.equals(other.sprzedawca))
return false;
return true;
}
@Override
public String toString() {
return String.format("Ogłoszenie #%d: sprzedawca #%s, cena: %.2f\n %s",
idOgloszenia, idSprzedawcy, cena, tytul);
}
}
package ogloszenia.model;
import java.math.BigDecimal;
import java.time.LocalDateTime;
public class OgloszenieSamochodowe extends Ogloszenie {
private String marka;
private String model;
private String generacja;
public int rocznik;
private int przebieg;
private String kolor;
private Silnik silnik;
public OgloszenieSamochodowe() {
}
public OgloszenieSamochodowe(Integer idOgloszenia, Integer idSprzedawcy,
LocalDateTime dataWystawienia, BigDecimal cena, String tytul, String opis,
String marka, String model, String generacja, String kolor, int rocznik, int przebieg, Silnik silnik) {
super(idOgloszenia, idSprzedawcy, dataWystawienia, cena, tytul, opis);
this.marka = marka;
this.model = model;
this.generacja = generacja;
this.kolor = kolor;
this.rocznik = rocznik;
this.przebieg = przebieg;
this.silnik = silnik;
}
/** Pozostawia pole sprzedawca równe null. */
public OgloszenieSamochodowe(Integer idOgloszenia, LocalDateTime dataWystawienia, BigDecimal cena, String tytul, String opis,
String marka, String model, String generacja, String kolor, int rocznik, int przebieg, Silnik silnik) {
super(idOgloszenia, dataWystawienia, cena, tytul, opis);
this.marka = marka;
this.model = model;
this.generacja = generacja;
this.kolor = kolor;
this.rocznik = rocznik;
this.przebieg = przebieg;
this.silnik = silnik;
}
/** Wartość idSprzedawcy pobiera z obiektu sprzedawca. */
public OgloszenieSamochodowe(Integer idOgloszenia, Sprzedawca sprzedawca,
LocalDateTime dataWystawienia, BigDecimal cena, String tytul, String opis,
String marka, String model, String generacja, String kolor, int rocznik, int przebieg, Silnik silnik) {
super(idOgloszenia, sprzedawca, dataWystawienia, cena, tytul, opis);
this.marka = marka;
this.model = model;
this.generacja = generacja;
this.kolor = kolor;
this.rocznik = rocznik;
this.przebieg = przebieg;
this.silnik = silnik;
}
public String getMarka() {
return marka.toUpperCase();
}
public void setMarka(String marka) {
this.marka = marka;
}
public String getModel() {
return model;
}
public String getGeneracja() {
return generacja;
}
public String getKolor() {
return kolor;
}
public int getRocznik() {
return rocznik;
}
public int getPrzebieg() {
return przebieg;
}
public Silnik getSilnik() {
return silnik;
}
@Override
public int hashCode() {
final int prime = 31;
int result = super.hashCode();
result = prime * result + ((generacja == null) ? 0 : generacja.hashCode());
result = prime * result + ((kolor == null) ? 0 : kolor.hashCode());
result = prime * result + ((marka == null) ? 0 : marka.hashCode());
result = prime * result + ((model == null) ? 0 : model.hashCode());
result = prime * result + rocznik;
result = prime * result + ((silnik == null) ? 0 : silnik.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (!super.equals(obj))
return false;
if (getClass() != obj.getClass())
return false;
OgloszenieSamochodowe other = (OgloszenieSamochodowe) obj;
if (generacja == null) {
if (other.generacja != null)
return false;
} else if (!generacja.equals(other.generacja))
return false;
if (kolor == null) {
if (other.kolor != null)
return false;
} else if (!kolor.equals(other.kolor))
return false;
if (marka == null) {
if (other.marka != null)
return false;
} else if (!marka.equals(other.marka))
return false;
if (model == null) {
if (other.model != null)
return false;
} else if (!model.equals(other.model))
return false;
if (rocznik != other.rocznik)
return false;
if (silnik == null) {
if (other.silnik != null)
return false;
} else if (!silnik.equals(other.silnik))
return false;
return true;
}
@Override
public String toString() {
return super.toString() + "\n" +
String.format(" Samochód: %s %s %s (%s), rok %d, silnik: %s",
marka, model, generacja, kolor, rocznik, silnik);
}
}
package ogloszenia.model;
public enum Paliwo {
BENZYNA,
OLEJ,
GAZ,
HYBRYDA,
ELEKTRYCZNY;
}
package ogloszenia.model;
public class Silnik {
private Float moc;
private Float pojemnosc;
private Paliwo paliwo;
public Silnik() {
}
public Silnik(Float moc, Float pojemnosc, Paliwo paliwo) {
this.moc = moc;
this.pojemnosc = pojemnosc;
this.paliwo = paliwo;
}
public Float getMoc() {
return moc;
}
public Float getPojemnosc() {
return pojemnosc;
}
public Paliwo getPaliwo() {
return paliwo;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((moc == null) ? 0 : moc.hashCode());
result = prime * result + ((paliwo == null) ? 0 : paliwo.hashCode());
result = prime * result + ((pojemnosc == null) ? 0 : pojemnosc.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Silnik other = (Silnik) obj;
if (moc == null) {
if (other.moc != null)
return false;
} else if (!moc.equals(other.moc))
return false;
if (paliwo != other.paliwo)
return false;
if (pojemnosc == null) {
if (other.pojemnosc != null)
return false;
} else if (!pojemnosc.equals(other.pojemnosc))
return false;
return true;
}
@Override
public String toString() {
return String.format("%.1f %s, %.0f KM", pojemnosc, paliwo, moc);
}
}
package ogloszenia.model;
public class Sprzedawca {
private Integer idSprzedawcy;
private String nazwa;
private Adres adres;
private String telefon;
private String email;
public Sprzedawca() {
}
public Sprzedawca(Integer idSprzedawcy, String nazwa, Adres adres, String telefon, String email) {
this.idSprzedawcy = idSprzedawcy;
this.nazwa = nazwa;
this.adres = adres;
this.telefon = telefon;
this.email = email;
}
public Integer getIdSprzedawcy() {
return idSprzedawcy;
}
public String getNazwa() {
return nazwa;
}
public Adres getAdres() {
return adres;
}
public String getTelefon() {
return telefon;
}
public String getEmail() {
return email;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((adres == null) ? 0 : adres.hashCode());
result = prime * result + ((email == null) ? 0 : email.hashCode());
result = prime * result + ((idSprzedawcy == null) ? 0 : idSprzedawcy.hashCode());
result = prime * result + ((nazwa == null) ? 0 : nazwa.hashCode());
result = prime * result + ((telefon == null) ? 0 : telefon.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Sprzedawca other = (Sprzedawca) obj;
if (adres == null) {
if (other.adres != null)
return false;
} else if (!adres.equals(other.adres))
return false;
if (email == null) {
if (other.email != null)
return false;
} else if (!email.equals(other.email))
return false;
if (idSprzedawcy == null) {
if (other.idSprzedawcy != null)
return false;
} else if (!idSprzedawcy.equals(other.idSprzedawcy))
return false;
if (nazwa == null) {
if (other.nazwa != null)
return false;
} else if (!nazwa.equals(other.nazwa))
return false;
if (telefon == null) {
if (other.telefon != null)
return false;
} else if (!telefon.equals(other.telefon))
return false;
return true;
}
@Override
public String toString() {
return String.format("Sprzedawca #%d: %s adres: %s, tel.: %s, email: %s",
idSprzedawcy, nazwa, adres, telefon, email);
}
}
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