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