package de.uniluebeck.mi.projmi6.db; import de.uniluebeck.mi.projmi6.model.*; import java.sql.*; import java.sql.Date; import java.util.*; /** * Created by nils on 15.11.2015. */ public class DBHandler { private static final String SELECT_ALL_PATIENTS = "SELECT * FROM `patient`"; private static final String SELECT_PATIENT_BY_ID = "SELECT * FROM `patient` WHERE `id` = ?"; private static final String UPDATE_PATIENT = "UPDATE `patient` " + "SET `CAVE`=?," + "`Familienstand`=?," + "`Geburtsdatum`=?," + "`Geburtsname`=?," + "`Geschlecht`=?," + // TODO: Hausnummer fehlt "`KassenID`=?," + "`LetzterBearbeiter`=?," + "`Nachname`=?," + "`Ort`=?," + "`PLZ`=?," + "`Strasse`=?," + "`Telefon`=?," + "`Versichertennummer`=?," + "`Vorname`=?" + "WHERE `ID`=?"; private static final String INSERT_PATIENT = "INSERT INTO `patient` " + "(`CAVE`," + "`Familienstand`," + "`Geburtsdatum`," + "`Geburtsname`," + "`Geschlecht`," + "`Hausnummer`," + "`KassenID`," + "`LetzterBearbeiter`," + "`Nachname`," + "`Ort`," + "`PLZ`," + "`Strasse`," + "`Telefon`," + "`Versichertennummer`," + "`Vorname`," + "`Ersteller`)" + "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; private static final String SELECT_ALL_STATIONEN = "SELECT * FROM `stammstation`"; private static final String SELECT_FAELLE_BY_PATID = "SELECT * FROM `fall` WHERE `patientid` = ?"; private static final String INSERT_FALL = "INSERT INTO `fall` " + "(`Aufnahmedatum`," + "`Entlassungsdatum`," + "`Vorstelldatum`," + "`EinweisenderArzt`," + "`Fallart`," + "`Selbsteinweisung`," + "`Hauptdiagnose`," + "`PatientID`," + "`Versichertennummer`," + "`KassenID`," + "`storniert`," + "`Letzter Bearbeiter`" + "`Ersteller`)," + "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; private static final String UPDATE_FALL = "UPDATE `fall`" + "SET `Aufnahmedatum`=?," + "`Entlassungsdatum`=?," + "`Vorstelldatum`=?" + "`EinweisenderArzt`=?," + "Fallart=?," + "`Selbsteinweisung`=?," + "Hauptdiagnose=?," + "`PatientID`=?," + "`Versichertennummer`=?," + "KassenID=?," + "`storniert`=?," + "LetzterBearbeiter=?," + "WHERE `FallID`=?"; private static final String SELECT_DIAGNOSE_BY_ID = "SELECT * FROM `diagnose` WHERE `diagid` = ?"; private static final String SELECT_ALL_ICD10CODES = "SELECT * FROM `stammicd10`"; private static final String SELECT_ALL_OPSCODES = "SELECT * FROM `stammops`"; private static final String SELECT_ICD10CODE_BY_ID = "SELECT * FROM `stammicd10` WHERE `icd10code` = ? AND `version` = ?"; private static final String SELECT_OPSCODE_BY_ID = "SELECT * FROM `stammops` WHERE `opscode` = ? AND `version` = ?"; private static final String SELECT_ALL_MITARBEITER = "SELECT * FROM `mitarbeiter`"; private static final String SELECT_UNTERS_BY_FALLID = "SELECT * FROM `untersuchung` WHERE `fallid` = ?"; private static final String SELECT_MITARBEITER_BY_ID = "SELECT * FROM `mitarbeiter` WHERE `mitarbid` = ?"; private static final String SELECT_DIAGNOSE_BY_FALLID = "SELECT * FROM `diagnose` WHERE `fallid` = ?"; private static final String SELECT_ALL_KASSEN = "SELECT * FROM `kasse`"; public static List getAllPatients() throws SQLException { Statement statement = MySqlConnFactory.getConnection().createStatement(); ResultSet rs = statement.executeQuery(SELECT_ALL_PATIENTS); List patients = new ArrayList<>(); while (rs.next()) { patients.add(getPatient(rs)); } return patients; } public static Patient getPatient(int id) throws SQLException { PreparedStatement statement = MySqlConnFactory.getConnection().prepareStatement(SELECT_PATIENT_BY_ID); ResultSet rs; statement.setInt(1, id); rs = statement.executeQuery(); return getPatient(rs); } private static Patient getPatient(ResultSet rs) throws SQLException { Patient patient = new Patient(); patient.setPatID(rs.getInt("id")); patient.setGeburtsname(rs.getString("geburtsname")); patient.setVorname(rs.getString("vorname")); patient.setNachname(rs.getString("nachname")); if (rs.getDate("geburtsdatum") != null) patient.setGeburtsdatum(rs.getDate("geburtsdatum").toLocalDate()); patient.setStrasse(rs.getString("strasse")); patient.setHausnummer(rs.getString("hausnummer")); patient.setPlz(rs.getString("plz")); patient.setTelefon(rs.getString("telefon")); // patient.setFamilienstand(rs.getString("familienstand")); TODO // patient.setGeschlecht(Patient.Geschlecht.valueOf(rs.getString("geschlecht"))); TODO patient.setVersichertennummer(rs.getString("versichertennummer")); patient.setKassenID(rs.getInt("kassenid")); setVersionInformation(patient, rs); return patient; } // TODO: Defaultwerte entfernen und so. public static void updatePatient(Patient patient, int mitarbid) throws SQLException { PreparedStatement statement = MySqlConnFactory.getConnection().prepareStatement(UPDATE_PATIENT); statement.setString(1, patient.getCave()); // CAVE if (patient.getFamilienstand() != null) statement.setString(2, patient.getFamilienstand().toString()); // Familienstand else statement.setString(2, "l"); statement.setDate(3, Date.valueOf(patient.getGeburtsdatum())); // Geburtsdatum statement.setString(4, patient.getGeburtsname()); // Geburtsname if (patient.getGeschlecht() != null) statement.setString(5, String.valueOf(patient.getGeschlecht().id())); // Geschlecht else statement.setString(5, "o"); // statement.setInt(6, patient.getKassenID()); // KasseId statement.setInt(6, 1); // KasseId statement.setInt(7, mitarbid); // Letzterbearbeiter statement.setString(8, patient.getNachname()); // Nachname statement.setString(9, patient.getOrt()); // Ort statement.setString(10, patient.getPlz()); // PLZ statement.setString(11, patient.getStrasse()); // Strasse statement.setString(12, patient.getTelefon()); // telefon statement.setString(13, patient.getVersichertennummer()); // versichertennummer statement.setString(14, patient.getVorname()); // vorname statement.setInt(15, patient.getPatID()); // patid System.out.println(statement.toString()); statement.executeUpdate(); } public static void insertPatient(Patient patient, int mitarbid) throws SQLException { PreparedStatement statement = MySqlConnFactory.getConnection().prepareStatement(INSERT_PATIENT); statement.setString(1, patient.getCave()); // `CAVE` if (patient.getFamilienstand() != null) statement.setString(2, String.valueOf(patient.getFamilienstand().id())); // `Familienstand` else statement.setString(2, "l"); statement.setDate(3, Date.valueOf(patient.getGeburtsdatum())); // `Geburtdatum` statement.setString(4, patient.getGeburtsname()); // `Geburtsname` if (patient.getGeschlecht() != null) statement.setString(5, String.valueOf(patient.getGeschlecht().id())); // `Geschlecht` else statement.setString(5, "o"); statement.setString(6, patient.getHausnummer()); // `Hausnummer` //statement.setInt(7, patient.getKassenID()); // `KassenID` statement.setInt(7, 1); // `KassenID` statement.setInt(8, mitarbid); // `LetzterBearbeiter` statement.setString(9, patient.getNachname()); // `Nachname` statement.setString(10, patient.getOrt()); // `Ort` statement.setString(11, patient.getPlz()); // `PLZ` statement.setString(12, patient.getStrasse()); // `Strasse` statement.setString(13, patient.getTelefon()); // `Telefon` statement.setString(14, patient.getVersichertennummer()); // `Versichertennummer` statement.setString(15, patient.getVorname()); // `Vorname` statement.setInt(16, mitarbid); // `Ersteller` System.out.println(statement.toString()); statement.execute(); } public static List getAllStationen() throws SQLException { Statement statement = MySqlConnFactory.getConnection().createStatement(); ResultSet rs = statement.executeQuery(SELECT_ALL_STATIONEN); List stationen = new ArrayList<>(); while (rs.next()) { stationen.add(getStation(rs)); } return stationen; } private static Station getStation(ResultSet rs) throws SQLException { Station station = new Station(); station.setStation(rs.getString("station")); station.setBezeichnung(rs.getString("bezeichnung")); station.setBezeichnungLang(rs.getString("bezeichnunglang")); station.setStationstyp(rs.getInt("stationstyp")); return station; } public static List getFaelleByPatID(int id) throws SQLException { PreparedStatement statement = MySqlConnFactory.getConnection().prepareStatement(SELECT_FAELLE_BY_PATID); statement.setInt(1, id); ResultSet rs = statement.executeQuery(); List faelle = new ArrayList<>(); while (rs.next()) { faelle.add(getFall(rs)); } return faelle; } private static Fall getFall(ResultSet rs) throws SQLException { Fall fall = new Fall(); fall.setFallID(rs.getInt("fallid")); if (rs.getTimestamp("aufnahmedatum") != null) fall.setAufnahmeDatum(rs.getTimestamp("aufnahmedatum").toLocalDateTime()); if (rs.getTimestamp("entlassungsdatum") != null) fall.setEntlassungsDatum(rs.getTimestamp("entlassungsdatum").toLocalDateTime()); if (rs.getInt("hauptdiagnose") != 0) fall.setHauptDiagnose(getDiagnose(rs.getInt("hauptdiagnose"), fall)); return fall; } // TODO: Mach eins aus insert und update (boolean Flag in die Methode) // private static void setInsertFall(Fall fall, int mitarbid, boolean isUpdate) { public static void insertFall(Fall fall, int mitarbid) throws SQLException { /*PreparedStatement statement; if (isUpdate) { statement = MySqlConnFactory.getConnection().prepareStatement(INSERT_FALL); } else { statement = MySqlConnFactory.getConnection().prepareStatement(INSERT_FALL); }*/ PreparedStatement statement = MySqlConnFactory.getConnection().prepareStatement(INSERT_FALL); if (fall.getAufnahmeDatum() != null) statement.setTimestamp(1, Timestamp.valueOf(fall.getAufnahmeDatum())); // Aufnahmedatum if (fall.getEntlassungsDatum() != null) statement.setTimestamp(2, Timestamp.valueOf(fall.getEntlassungsDatum())); // Entlassungsdatum if (fall.getVorstellDatum() != null) statement.setTimestamp(3, Timestamp.valueOf(fall.getVorstellDatum())); // Vorstelldatum if (fall.getEinweisenderArzt() != null) statement.setInt(4, fall.getEinweisenderArzt().getMitarbID()); // EinweisenderArzt statement.setString(5, fall.getFallArt().id()); // Fallart statement.setBoolean(6, fall.getSelbsteinweisung()); // Selbsteinweisung if (fall.getHauptDiagnose() != null) statement.setInt(7, fall.getHauptDiagnose().getDiagID()); // Hauptdiagnose statement.setInt(8, fall.getPatient().getPatID()); // PatientID statement.setString(9, fall.getVersichertenNummer()); // Versichertennummer if (fall.getKasse() != null) statement.setInt(10, fall.getKasse().getKassenID()); // KassenID statement.setBoolean(11, fall.getStorniert()); // storniert statement.setInt(12, mitarbid); // Letzter Bearbeiter // if (!isUpdate) statement.setInt(13, mitarbid); // Ersteller statement.execute(); } // TODO: Kann dann weg. public static void updateFall(Fall fall, int mitarbid) throws SQLException { PreparedStatement statement = MySqlConnFactory.getConnection().prepareStatement(UPDATE_FALL); if (fall.getAufnahmeDatum() != null) statement.setTimestamp(1, Timestamp.valueOf(fall.getAufnahmeDatum())); // Aufnahmedatum if (fall.getEntlassungsDatum() != null) statement.setTimestamp(2, Timestamp.valueOf(fall.getEntlassungsDatum())); // Entlassungsdatum if (fall.getVorstellDatum() != null) statement.setTimestamp(3, Timestamp.valueOf(fall.getVorstellDatum())); // Vorstelldatum if (fall.getEinweisenderArzt() != null) statement.setInt(4, fall.getEinweisenderArzt().getMitarbID()); // EinweisenderArzt statement.setString(5, fall.getFallArt().id()); // Fallart statement.setBoolean(6, fall.getSelbsteinweisung()); // Selbsteinweisung if (fall.getHauptDiagnose() != null) statement.setInt(7, fall.getHauptDiagnose().getDiagID()); // Hauptdiagnose statement.setInt(8, fall.getPatient().getPatID()); // PatientID statement.setString(9, fall.getVersichertenNummer()); // Versichertennummer if (fall.getKasse() != null) statement.setInt(10, fall.getKasse().getKassenID()); // KassenID statement.setBoolean(11, fall.getStorniert()); // storniert statement.setInt(12, mitarbid); // Letzter Bearbeiter statement.execute(); } private static Diagnose getDiagnose(int diagid, Fall fall) throws SQLException { Diagnose diagnose = getDiagnose(diagid); diagnose.setFall(fall); return diagnose; } private static Diagnose getDiagnose(int id) throws SQLException { PreparedStatement statement = MySqlConnFactory.getConnection().prepareStatement(SELECT_DIAGNOSE_BY_ID); statement.setInt(1, id); ResultSet rs = statement.executeQuery(); rs.next(); // TODO return getDiagnose(rs); } private static Diagnose getDiagnose(ResultSet rs) throws SQLException { Diagnose diagnose = new Diagnose(); diagnose.setFreiText(rs.getString("freitext")); diagnose.setArzt(new Mitarbeiter(rs.getInt("arzt"))); diagnose.setDiagArt(DiagArt.parseInt(rs.getInt("diagart"))); setVersionInformation(diagnose, rs); diagnose.setIcd10code(getIcd10Code(rs.getString("icd10code"), rs.getInt("icd10version"))); return diagnose; } private static void setVersionInformation(Version version, ResultSet rs) throws SQLException { version.setErsteller(rs.getInt("ersteller")); if (rs.getTimestamp("erstelldatum") != null) version.setErstellDatumZeit(rs.getTimestamp("erstelldatum").toLocalDateTime()); version.setBearbeiter(rs.getInt("letzterbearbeiter")); if (rs.getTimestamp("letztesbearbeitungsdatum") != null) version.setBearbeitetDatumZeit(rs.getTimestamp("letztesbearbeitungsdatum").toLocalDateTime()); } public static List getAllIcd10Codes() throws SQLException { Statement statement = MySqlConnFactory.getConnection().createStatement(); ResultSet rs = statement.executeQuery(SELECT_ALL_ICD10CODES); List icd10codes = new ArrayList<>(); while (rs.next()) { icd10codes.add(getIcd10Code(rs)); } return icd10codes; } private static Icd10Code getIcd10Code(String code, int version) throws SQLException { PreparedStatement statement = MySqlConnFactory.getConnection().prepareStatement(SELECT_ICD10CODE_BY_ID); ResultSet rs; statement.setString(1, code); statement.setInt(2, version); rs = statement.executeQuery(); rs.next(); // TODO return getIcd10Code(rs); } private static Icd10Code getIcd10Code(ResultSet rs) throws SQLException { String code = rs.getString("icd10code"); String text = rs.getString("text"); int version = rs.getInt("version"); return new Icd10Code(code, text, version); } public static List getAllOpsCodes() throws SQLException { Statement statement = MySqlConnFactory.getConnection().createStatement(); ResultSet rs = statement.executeQuery(SELECT_ALL_OPSCODES); List opscodes = new ArrayList<>(); while (rs.next()) { opscodes.add(getOpsCode(rs)); } return opscodes; } public static OpsCode getOpsCode(String code, int version) throws SQLException { PreparedStatement statement = MySqlConnFactory.getConnection().prepareStatement(SELECT_OPSCODE_BY_ID); ResultSet rs; statement.setString(1, code); statement.setInt(2, version); rs = statement.executeQuery(); rs.next(); // TODO return getOpsCode(rs); } private static OpsCode getOpsCode(ResultSet rs) throws SQLException { String code = rs.getString("opscode"); String text = rs.getString("text"); int version = rs.getInt("version"); return new OpsCode(code, text, version); } public static List getAllMitarbeiter() throws SQLException { Statement statement = MySqlConnFactory.getConnection().createStatement(); ResultSet rs = statement.executeQuery(SELECT_ALL_MITARBEITER); List mitarbeiters = new ArrayList<>(); while (rs.next()) { mitarbeiters.add(getMitarbeiter(rs)); } return mitarbeiters; } private static Mitarbeiter getMitarbeiter(int id) throws SQLException { PreparedStatement statement = MySqlConnFactory.getConnection().prepareStatement(SELECT_MITARBEITER_BY_ID); ResultSet rs; statement.setInt(1, id); rs = statement.executeQuery(); rs.next(); // TODO return getMitarbeiter(rs); } private static Mitarbeiter getMitarbeiter(ResultSet rs) throws SQLException { Mitarbeiter mitarbeiter = new Mitarbeiter(rs.getInt("mitarbid")); mitarbeiter.setTitel(rs.getString("titel")); mitarbeiter.setVorname(rs.getString("vorname")); mitarbeiter.setNachname(rs.getString("nachname")); mitarbeiter.setEinweisenderArzt(rs.getString("einweisenderarzt")); return mitarbeiter; } public static List getUntersuchungByFall(Fall fall) throws SQLException { PreparedStatement statement = MySqlConnFactory.getConnection().prepareStatement(SELECT_UNTERS_BY_FALLID); statement.setInt(1, fall.getFallID()); ResultSet rs = statement.executeQuery(); List untersuchungen = new ArrayList<>(); while (rs.next()) { untersuchungen.add(getUntersuchung(rs, fall)); } return untersuchungen; } private static Untersuchung getUntersuchung(ResultSet rs, Fall fall) throws SQLException { Untersuchung untersuchung = new Untersuchung(); untersuchung.setUntersID(rs.getInt("untersid")); untersuchung.setFall(fall); untersuchung.setDurchfuehrenderArzt(getMitarbeiter(rs.getInt("durchfuehrenderarzt"))); untersuchung.setUntersuchungsdatum(rs.getTimestamp("untersuchungsdatum").toLocalDateTime()); untersuchung.setOpscode(getOpsCode(rs.getString("opscode"), rs.getInt("opsversion"))); setVersionInformation(untersuchung, rs); return untersuchung; } public static List getDiagnosenByFall(Fall fall) throws SQLException { PreparedStatement statement = MySqlConnFactory.getConnection().prepareStatement(SELECT_DIAGNOSE_BY_FALLID); statement.setInt(1, fall.getFallID()); ResultSet rs = statement.executeQuery(); List diagnosen = new ArrayList<>(); while (rs.next()) { diagnosen.add(getDiagnose(rs.getInt("diagid"), fall)); } return diagnosen; } public static List getAllKassen() throws SQLException { Statement statement = MySqlConnFactory.getConnection().createStatement(); ResultSet rs = statement.executeQuery(SELECT_ALL_KASSEN); List kassen = new ArrayList<>(); while (rs.next()) { kassen.add(getKasse(rs)); } return kassen; } private static Kasse getKasse(ResultSet rs) throws SQLException { Kasse kasse = new Kasse(); kasse.setKassenID(rs.getInt("kassenid")); kasse.setName(rs.getString("name")); kasse.setAdresse(rs.getString("adresse")); kasse.setPrivat(rs.getBoolean("privat")); setVersionInformation(kasse, rs); return kasse; } }