SQLite - zła data.

0

Witam serdecznie,

Jestem gotowy na to, że mnie dojedziecie ostro, ale siedzę na tym problemem już tyle czasu i muszę zapytać.
Piszę program do rejestracji gości (np w hotelu)
Program zapisuje dane do lokalnej bazy danych SQLite. Składa się z 3 plików: wykonywalnego ofc, klasy do obsługi zapytań i z klasy Guest.
Błąd polega na tym, że gdy tworzę nowy obiekt insertGuest, to wyświetla mi zupełnie inną datę niż podaję - np wpisuję 10-10-2015 a pokazuje mi 3648-11-10. Próbowałem już SimpleDateFormat i przepisywanie do Stringów, ale cały czas efekt jest zerowy.

Czy ktoś może mi powiedzieć czemu tak jest ?

Guest.java:

package rejestracja;

import java.sql.Date;

public class Guest {

    private int id;
    private String imie;
    private String nazwisko;
    private int lDoroslych;
    private int lDzieci;
    private Date dataPrzyjazdu;
    private int dlPobytu;
    private int koszt;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getImie() {
        return imie;
    }

    public void setImie(String imie) {
        this.imie = imie;
    }

    public String getNazwisko() {
        return nazwisko;
    }

    public void setNazwisko(String nazwisko) {
        this.nazwisko = nazwisko;
    }

    public int getLDorosych() {
    return lDoroslych;
    }

    public void setLDorolych(int lDoroslych) {
        this.lDoroslych = lDoroslych;
    }
    
    public int getLDzieci() {
    return lDzieci;
    }

    public void setLDzieci(int lDzieci) {
        this.lDzieci = lDzieci;
    }
    
    public Date getDataPrzyjazdu() {
        return dataPrzyjazdu;
    }

    public void setDataPrzyjazdu(Date dataPrzyjazdu) {
        this.dataPrzyjazdu = dataPrzyjazdu;
    }
    
    public int getDlPobytu() {
        return dlPobytu;
    }

    public void setDlPobytu(int dlPobytu) {
        this.dlPobytu = dlPobytu;
    }
    
    public int getKoszt() {
        return koszt;
    }

    public void setKoszt(int koszt) {
        this.koszt = koszt;
    }

    public Guest() {
    }

    public Guest(int id, String imie, String nazwisko, int lDoroslych, int lDzieci, Date dataPrzyjazdu, int dlPobytu, int koszt) {
        this.id = id;
        this.imie = imie;
        this.nazwisko = nazwisko;
        this.lDoroslych = lDoroslych;
        this.lDzieci = lDzieci;
        this.dataPrzyjazdu = dataPrzyjazdu;
        this.dlPobytu = dlPobytu;
        this.koszt = koszt;
        
    }

    @Override
    public String toString() {
        return "[" + id + "] - " + imie + " " + nazwisko + " - [l.doroslych,l.dzieci]: [" + lDoroslych + "," + lDzieci + "] - Data przyjazdu " + dataPrzyjazdu + " - Długość pobytu: " + dlPobytu + " - Koszt: " + koszt;
    }
}

dbHandler.java:

package rejestracja;

import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.LinkedList;
import java.util.List;

public class dbHandler {

    public static final String DRIVER = "org.sqlite.JDBC";
    public static final String DB_URL = "jdbc:sqlite:bazavilla.db";

    private Connection conn;
    private Statement stat;

    public dbHandler() {
        try {
            Class.forName(dbHandler.DRIVER);
        } catch (ClassNotFoundException e) {
            System.err.println("Brak sterownika JDBC");
            e.printStackTrace();
        }

        try {
            conn = DriverManager.getConnection(DB_URL);
            stat = conn.createStatement();
        } catch (SQLException e) {
            System.err.println("Problem z otwarciem polaczenia");
            e.printStackTrace();
        }

        createTables();
    }

    public boolean createTables() {
        String createKlienci = "CREATE TABLE IF NOT EXISTS klienci "
                + "(id_klienta INTEGER PRIMARY KEY AUTOINCREMENT, imie varchar(255), nazwisko varchar(255),"
                + " lDoroslych int, lDzieci int, dataPrzyjazdu date, dlPobytu int, koszt int)";
        try {
            stat.execute(createKlienci);
        } catch (SQLException e) {
            System.err.println("Blad przy tworzeniu tabeli");
            e.printStackTrace();
            return false;
        }
        return true;
    }

    public boolean insertGuest(String imie, String nazwisko, int lDoroslych, int lDzieci, int rok, int miesiac, int dzien, int dlPobytu, int koszt) {
        try {
            PreparedStatement prepStmt = conn.prepareStatement(
                    "insert into klienci values (NULL, ?, ?, ?, ?, ?, ?, ?);");
            prepStmt.setString(1, imie);
            prepStmt.setString(2, nazwisko);
            prepStmt.setInt(3, lDoroslych);
            prepStmt.setInt(4, lDzieci);
            prepStmt.setDate(5, new java.sql.Date(rok, miesiac, dzien));
            prepStmt.setInt(6, dlPobytu);
            prepStmt.setInt(7, koszt);

            prepStmt.execute();
        } catch (SQLException e) {
            System.err.println("Blad przy wprowadzaniu nowego klienta");
            return false;
        }
        return true;
    }

    public List<Guest> selectGuests() {
        List<Guest> guests = new LinkedList<Guest>();
        try {
            ResultSet result = stat.executeQuery("SELECT * FROM klienci");
            int id, dlPobytu, koszt, lDoroslych, lDzieci;
            String imie, nazwisko;
            Date dataPrzyjazdu;
            while (result.next()) {
                id = result.getInt("id_klienta");
                imie = result.getString("imie");
                nazwisko = result.getString("nazwisko");
                lDoroslych = result.getInt("lDoroslych");
                lDzieci = result.getInt("lDzieci");
                dataPrzyjazdu = result.getDate("dataPrzyjazdu");
                dlPobytu = result.getInt("dlPobytu");
                koszt = result.getInt("koszt");
                guests.add(new Guest(id, imie, nazwisko, lDoroslych, lDzieci, dataPrzyjazdu, dlPobytu, koszt));
            }
        } catch (SQLException e) {
            e.printStackTrace();
            return null;
        }
        return guests;
    }
    
    public void closeConnection() {
        try {
            conn.close();
        } catch (SQLException e) {
            System.err.println("Problem z zamknieciem polaczenia");
            e.printStackTrace();
        }
    }
}

main.java:

        dbHandler dbh = new dbHandler();
        dbh.insertGuest("Karol", "Testovski", 2, 2, 2000, 10, 10, 7, 1500);
        List<Guest> guests = dbh.selectGuests();
        
        System.out.println("Lista gości: ");
        for(Guest g: guests)
            System.out.println(g);
        
        dbh.closeConnection();

Proszę o pomoc i w miarę możliwości, o wyrozumiałość,
Pozdrawiam

0

Jestes pewny ze baza danych ma jakikolwiek zwiazek? Probowales utrorzyc goscia i od razu go wypisac? Jest ten sam problem czy nie?
Na pierwszy rzut oka: uzywasz konstruktora Date(year, month, day), a dokumentacja (https://docs.oracle.com/javase/6/docs/api/java/sql/Date.html#Date(int, int, int)) mowi ze rok to rok -1900. Nie wiem czy to jest akurat ten blad, ale wyglada ze rowniez to robisz zle.
Dlaczego uzywasz java.sql.Date (ktora jest podklasa java.util.Date)? Jak uzywasz Javy 8 to zainteresuj sie pakietem java.time (http://docs.oracle.com/javase/tutorial/datetime/), to jest znacznie przyjemniejsze niz java.util.Date czy Calendar.

0

Dziękuję za podpowiedź :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1