4 Commits

6 changed files with 79 additions and 128 deletions
+64 -103
View File
@@ -1,6 +1,7 @@
package fi.lpam.dataluokat; package fi.lpam.dataluokat;
import fi.lpam.gui.virheDialogit.SiirtoVirhe; import fi.lpam.gui.virheDialogit.SiirtoVirhe;
import javafx.scene.control.Alert;
import java.sql.*; import java.sql.*;
import java.time.DayOfWeek; import java.time.DayOfWeek;
@@ -29,7 +30,6 @@ public class Asiakas implements TietokantaOlio {
} }
/** /**
* Vain MultiColumnListViewin käyttöön
* @param nimi Asiakkaan nimi * @param nimi Asiakkaan nimi
*/ */
public Asiakas(String nimi) { public Asiakas(String nimi) {
@@ -40,65 +40,9 @@ public class Asiakas implements TietokantaOlio {
* Kun luetaan asiakas tietokannasta * Kun luetaan asiakas tietokannasta
*/ */
private Asiakas(int id, private Asiakas(int id,
String nimi, String nimi) {
String osoite,
int maanantaiKpl,
int tiistaiKpl,
int keskiviikkoKpl,
int torstaiKpl,
int perjantaiKpl,
int salaatit,
int pääruoat,
int jälkiruoat,
String erityisruokavalio,
String avainTieto,
String lisätiedot,
String laskutusOsoite,
String yhteyshenkilönNimi,
String yhteyshenkilönPuhelinnumero,
String yhteyshenkilönSähköposti,
int lauantaiKpl,
int sunnuntaiKpl,
int dinnerMaanantaiKpl,
int dinnerTiistaiKpl,
int dinnerKeskiviikkoKpl,
int dinnerTorstaiKpl,
int dinnerPerjantaiKpl,
int dinnerLauantaiKpl,
int dinnerSunnuntaiKpl,
int dinnerSalaatit,
int dinnerPääruoat,
int dinnerJälkiruoat) {
this.id = id; this.id = id;
this.nimi = nimi; this.nimi = nimi;
this.osoite = osoite;
this.maanantaiKpl = maanantaiKpl;
this.tiistaiKpl = tiistaiKpl;
this.keskiviikkoKpl = keskiviikkoKpl;
this.torstaiKpl = torstaiKpl;
this.perjantaiKpl = perjantaiKpl;
this.lauantaiKpl = lauantaiKpl;
this.sunnuntaiKpl = sunnuntaiKpl;
this.salaatit = salaatit;
this.pääruoat = pääruoat;
this.jälkiruoat = jälkiruoat;
this.erityisruokavalio = erityisruokavalio;
this.avainTieto = avainTieto;
this.lisätiedot = lisätiedot;
this.laskutusOsoite = laskutusOsoite;
this.yhteyshenkilönNimi = yhteyshenkilönNimi;
this.yhteyshenkilönPuhelinnumero = yhteyshenkilönPuhelinnumero;
this.yhteyshenkilönSähköposti = yhteyshenkilönSähköposti;
this.dinnerMaanantaiKpl = dinnerMaanantaiKpl;
this.dinnerTiistaiKpl = dinnerTiistaiKpl;
this.dinnerKeskiviikkoKpl = dinnerKeskiviikkoKpl;
this.dinnerTorstaiKpl = dinnerTorstaiKpl;
this.dinnerPerjantaiKpl = dinnerPerjantaiKpl;
this.dinnerLauantaiKpl = dinnerLauantaiKpl;
this.dinnerSunnuntaiKpl = dinnerSunnuntaiKpl;
this.dinnerSalaatit = dinnerSalaatit;
this.dinnerPääruoat = dinnerPääruoat;
this.dinnerJälkiruoat = dinnerJälkiruoat;
} }
/** /**
@@ -106,15 +50,16 @@ public class Asiakas implements TietokantaOlio {
* @return ArrayList<Asiakas> * @return ArrayList<Asiakas>
*/ */
public static ArrayList<Asiakas> haeKaikki() { public static ArrayList<Asiakas> haeKaikki() {
ArrayList<Asiakas> asiakkaat = new ArrayList<>();
try (Connection tietokanta = Tietokanta.haeYhteys()) { try (Connection tietokanta = Tietokanta.haeYhteys()) {
Statement stmt = tietokanta.createStatement(); Statement stmt = tietokanta.createStatement();
ResultSet rs = stmt.executeQuery("select * from asiakkaat"); ResultSet rs = stmt.executeQuery("select id, nimi from asiakkaat");
return parsiResultSet(rs); asiakkaat = parsiResultSet(rs);
} catch (SQLException e) { } catch (SQLException e) {
SiirtoVirhe alert = new SiirtoVirhe(e); SiirtoVirhe alert = new SiirtoVirhe(e);
alert.showAndWait(); alert.showAndWait();
return null;
} }
return asiakkaat;
} }
/** /**
@@ -129,7 +74,7 @@ public class Asiakas implements TietokantaOlio {
sbIDt.append(", ").append(IDt[i]); sbIDt.append(", ").append(IDt[i]);
} }
try (Connection tietokanta = Tietokanta.haeYhteys()) { try (Connection tietokanta = Tietokanta.haeYhteys()) {
String sql = "select * from asiakkaat where id in (" + sbIDt + ")"; String sql = "select id, nimi from asiakkaat where id in (" + sbIDt + ")";
Statement stmt = tietokanta.createStatement(); Statement stmt = tietokanta.createStatement();
ResultSet rs = stmt.executeQuery(sql); ResultSet rs = stmt.executeQuery(sql);
@@ -149,49 +94,15 @@ public class Asiakas implements TietokantaOlio {
} }
/** /**
* Käsittelee ResultSettiä * Olettaa resultsetin sisältävän id:n ja nimen
* @param rs saatu ResultSet * @param rs saatu ResultSet
* @return ArrayList<Asiakas> * @return ArrayList<Asiakas>
*/ */
private static ArrayList<Asiakas> parsiResultSet(ResultSet rs) { private static ArrayList<Asiakas> parsiResultSet(ResultSet rs) {
ArrayList<Asiakas> asiakkaat = new ArrayList<>(); ArrayList<Asiakas> asiakkaat = new ArrayList<>();
try { try {
while (rs.next()) { while (rs.next()) {
int i = 1; asiakkaat.add(new Asiakas(rs.getInt("id"), rs.getString("nimi")));
Asiakas uusi = new Asiakas(
rs.getInt(i++),
rs.getString(i++),
rs.getString(i++),
rs.getInt(i++),
rs.getInt(i++),
rs.getInt(i++),
rs.getInt(i++),
rs.getInt(i++),
rs.getInt(i++),
rs.getInt(i++),
rs.getInt(i++),
rs.getString(i++),
rs.getString(i++),
rs.getString(i++),
rs.getString(i++),
rs.getString(i++),
rs.getString(i++),
rs.getString(i++),
rs.getInt(i++),
rs.getInt(i++),
rs.getInt(i++),
rs.getInt(i++),
rs.getInt(i++),
rs.getInt(i++),
rs.getInt(i++),
rs.getInt(i++),
rs.getInt(i++),
rs.getInt(i++),
rs.getInt(i++),
rs.getInt(i++)
);
asiakkaat.add(uusi);
} }
} }
catch (SQLException e) { catch (SQLException e) {
@@ -203,10 +114,8 @@ public class Asiakas implements TietokantaOlio {
/** /**
* Tallentaa uuden asiakkaan tietokantaan. Tietokanta luo automaattisesti id:n asiakkaalle. * Tallentaa uuden asiakkaan tietokantaan. Tietokanta luo automaattisesti id:n asiakkaalle.
*
*/ */
@Override private boolean tallennaUusi() {
public boolean tallennaUusi() {
try (Connection tietokanta = Tietokanta.haeYhteys()) { try (Connection tietokanta = Tietokanta.haeYhteys()) {
PreparedStatement stmt = tietokanta.prepareStatement("INSERT INTO asiakkaat (nimi, osoite, " + PreparedStatement stmt = tietokanta.prepareStatement("INSERT INTO asiakkaat (nimi, osoite, " +
"maanantaiKpl, tiistaiKpl, keskiviikkoKpl, torstaiKpl, perjantaiKpl, lauantaiKpl, sunnuntaiKpl, salaatit, pääruoat, jälkiruoat, " + "maanantaiKpl, tiistaiKpl, keskiviikkoKpl, torstaiKpl, perjantaiKpl, lauantaiKpl, sunnuntaiKpl, salaatit, pääruoat, jälkiruoat, " +
@@ -268,8 +177,7 @@ public class Asiakas implements TietokantaOlio {
/** /**
* Päivittää kutsuvan asiakkaan tiedot tietokantaan * Päivittää kutsuvan asiakkaan tiedot tietokantaan
*/ */
@Override private boolean päivitäTietokantaan() {
public boolean päivitäTietokantaan() {
try (Connection tietokanta = Tietokanta.haeYhteys()) { try (Connection tietokanta = Tietokanta.haeYhteys()) {
PreparedStatement stmt = tietokanta.prepareStatement("UPDATE asiakkaat set nimi = ?, osoite = ?, " + PreparedStatement stmt = tietokanta.prepareStatement("UPDATE asiakkaat set nimi = ?, osoite = ?, " +
"maanantaiKpl = ?, tiistaiKpl = ?, keskiviikkoKpl = ?, torstaiKpl = ?, perjantaiKpl = ?, lauantaiKpl = ?, sunnuntaiKpl = ?, salaatit = ?, pääruoat = ?, jälkiruoat = ?, " + "maanantaiKpl = ?, tiistaiKpl = ?, keskiviikkoKpl = ?, torstaiKpl = ?, perjantaiKpl = ?, lauantaiKpl = ?, sunnuntaiKpl = ?, salaatit = ?, pääruoat = ?, jälkiruoat = ?, " +
@@ -395,6 +303,53 @@ public class Asiakas implements TietokantaOlio {
}; };
} }
private String haeString(String sarake) {
try (Connection conn = Tietokanta.haeYhteys()) {
PreparedStatement stmt = conn.prepareStatement("select ? from asiakkaat where id = ?");
stmt.setString(1, sarake);
stmt.setInt(2, this.id);
ResultSet rs = stmt.executeQuery();
rs.next();
return rs.getString(1);
}
catch (Exception e) {
Alert alert = new SiirtoVirhe(e);
alert.showAndWait();
}
return null;
}
private int haeInt(String sarake) {
try (Connection conn = Tietokanta.haeYhteys()) {
PreparedStatement stmt = conn.prepareStatement("select ? from asiakkaat where id = ?");
stmt.setString(1, sarake);
stmt.setInt(2, this.id);
ResultSet rs = stmt.executeQuery();
rs.next();
return rs.getInt(1);
}
catch (Exception e) {
Alert alert = new SiirtoVirhe(e);
alert.showAndWait();
}
return 0;
}
private Date haeDate(String sarake) {
try (Connection conn = Tietokanta.haeYhteys()) {
PreparedStatement stmt = conn.prepareStatement("select ? from asiakkaat where id = ?");
stmt.setString(1, sarake);
stmt.setInt(2, this.id);
ResultSet rs = stmt.executeQuery();
rs.next();
return rs.getDate(1);
}
catch (Exception e) {
Alert alert = new SiirtoVirhe(e);
alert.showAndWait();
}
return null;
}
public int getId() { public int getId() {
return id; return id;
@@ -413,6 +368,9 @@ public class Asiakas implements TietokantaOlio {
} }
public String getOsoite() { public String getOsoite() {
if (osoite == null) {
osoite = haeString("osoite");
}
return osoite; return osoite;
} }
@@ -421,6 +379,9 @@ public class Asiakas implements TietokantaOlio {
} }
public int getMaanantaiKpl() { public int getMaanantaiKpl() {
if (maanantaiKpl == 0) {
maanantaiKpl = haeInt("maanantaiKpl");
}
return maanantaiKpl; return maanantaiKpl;
} }
@@ -86,8 +86,7 @@ public class Kierros implements TietokantaOlio {
} }
@Override private boolean tallennaUusi() {
public boolean tallennaUusi() {
try (Connection tietokanta = Tietokanta.haeYhteys()) { try (Connection tietokanta = Tietokanta.haeYhteys()) {
PreparedStatement stmt = tietokanta.prepareStatement("insert into kierrokset (kierrosNumero, asiakkaat) values (?, ?)", Statement.RETURN_GENERATED_KEYS); PreparedStatement stmt = tietokanta.prepareStatement("insert into kierrokset (kierrosNumero, asiakkaat) values (?, ?)", Statement.RETURN_GENERATED_KEYS);
stmt.setInt(1, kierrosNumero); stmt.setInt(1, kierrosNumero);
@@ -114,8 +113,7 @@ public class Kierros implements TietokantaOlio {
return true; return true;
} }
@Override private boolean päivitäTietokantaan() {
public boolean päivitäTietokantaan() {
try (Connection tietokanta = Tietokanta.haeYhteys()) { try (Connection tietokanta = Tietokanta.haeYhteys()) {
PreparedStatement stmt = tietokanta.prepareStatement("update kierrokset set asiakkaat = ?, kierrosnumero = ? where id = ?"); PreparedStatement stmt = tietokanta.prepareStatement("update kierrokset set asiakkaat = ?, kierrosnumero = ? where id = ?");
stmt.setString(1, muutaAsiakkaatMerkkijonoksi()); stmt.setString(1, muutaAsiakkaatMerkkijonoksi());
@@ -103,8 +103,7 @@ public class Kuljetus implements TietokantaOlio {
} }
} }
@Override private boolean tallennaUusi() {
public boolean tallennaUusi() {
try (Connection tietokanta = Tietokanta.haeYhteys()) { try (Connection tietokanta = Tietokanta.haeYhteys()) {
PreparedStatement stmt = tietokanta.prepareStatement("INSERT INTO kuljetukset (asiakasID, nimi, kuljetusPäivämäärä, kuljetusKierros, tyyppi, salaatit, pääruoat, jälkiruoat, ruokarajoite, osoite, avainTieto, lisätieto) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", Statement.RETURN_GENERATED_KEYS); PreparedStatement stmt = tietokanta.prepareStatement("INSERT INTO kuljetukset (asiakasID, nimi, kuljetusPäivämäärä, kuljetusKierros, tyyppi, salaatit, pääruoat, jälkiruoat, ruokarajoite, osoite, avainTieto, lisätieto) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", Statement.RETURN_GENERATED_KEYS);
stmt.setInt(1, asiakasID); stmt.setInt(1, asiakasID);
@@ -139,8 +138,7 @@ public class Kuljetus implements TietokantaOlio {
return true; return true;
} }
@Override private boolean päivitäTietokantaan() {
public boolean päivitäTietokantaan() {
try (Connection tietokanta = Tietokanta.haeYhteys()) { try (Connection tietokanta = Tietokanta.haeYhteys()) {
PreparedStatement stmt = tietokanta.prepareStatement("UPDATE kuljetukset set asiakasID = ?, nimi = ?, kuljetusPäivämäärä = ?, kuljetusKierros = ?, tyyppi = ?, salaatit = ?, pääruoat = ?, jälkiruoat = ?, ruokarajoite = ?, osoite = ?, avainTieto = ?, lisätieto = ? WHERE id = ?"); PreparedStatement stmt = tietokanta.prepareStatement("UPDATE kuljetukset set asiakasID = ?, nimi = ?, kuljetusPäivämäärä = ?, kuljetusKierros = ?, tyyppi = ?, salaatit = ?, pääruoat = ?, jälkiruoat = ?, ruokarajoite = ?, osoite = ?, avainTieto = ?, lisätieto = ? WHERE id = ?");
stmt.setInt(1, asiakasID); stmt.setInt(1, asiakasID);
@@ -1,12 +1,16 @@
package fi.lpam.dataluokat; package fi.lpam.dataluokat;
public interface TietokantaOlio { public interface TietokantaOlio {
/**
* Tallentaa joko uuden, tai päivittää olemassa olevaa riviä
* @return onnistuiko operaatio
*/
boolean tallenna();
boolean tallennaUusi(); /**
* Poistaa kutsuvan olion rivin tietokannasta
boolean päivitäTietokantaan(); * @return onnistuiko operaatio
*/
boolean poista(); boolean poista();
boolean tallenna();
} }
+1 -7
View File
@@ -7,7 +7,6 @@ import fi.lpam.gui.elementit.TabPohja;
import fi.lpam.Main; import fi.lpam.Main;
import javafx.geometry.Insets; import javafx.geometry.Insets;
import javafx.geometry.Pos; import javafx.geometry.Pos;
import javafx.geometry.Side;
import javafx.scene.Scene; import javafx.scene.Scene;
import javafx.scene.control.*; import javafx.scene.control.*;
import javafx.scene.image.Image; import javafx.scene.image.Image;
@@ -298,12 +297,7 @@ public class AsiakasIkkuna extends Stage {
int maxYritykset = 3; int maxYritykset = 3;
int yritykset = 0; int yritykset = 0;
while (!läpi) { while (!läpi) {
if (käsiteltäväAsiakas.getId() > 0) { läpi = käsiteltäväAsiakas.tallenna();
läpi = käsiteltäväAsiakas.päivitäTietokantaan();
}
else {
läpi = käsiteltäväAsiakas.tallennaUusi();
}
yritykset++; yritykset++;
if (yritykset > maxYritykset) { if (yritykset > maxYritykset) {
break; break;
@@ -192,11 +192,7 @@ public class KuljetusListat extends TabPohja {
private void tallennaKierros() { private void tallennaKierros() {
try { try {
for (Kuljetus kuljetus : tableView.getItems()) { for (Kuljetus kuljetus : tableView.getItems()) {
if (kuljetus.getId() > 0) { kuljetus.tallenna();
kuljetus.päivitäTietokantaan();
} else {
kuljetus.tallennaUusi();
}
} }
tallennusStatus.setText("Tallennettu: Kyllä"); tallennusStatus.setText("Tallennettu: Kyllä");
btnTulosta.setDisable(false); btnTulosta.setDisable(false);