Im Rahmen der Veranstaltung "CS3330 - Projektpraktikum MedizinischeInformatik" an der Universität zu Lübeck entstandenes Krankenhausinformationssystem (KIS).
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

679 regels
28 KiB

  1. package de.uniluebeck.mi.projmi6.db;
  2. import de.uniluebeck.mi.projmi6.model.*;
  3. import java.sql.*;
  4. import java.util.ArrayList;
  5. import java.util.List;
  6. /**
  7. * Handler fuer alle DB Interaktionen.
  8. */
  9. public class DBHandler {
  10. private static final String SELECT_ALL_PATIENTS = "SELECT * FROM `patient`";
  11. private static final String SELECT_PATIENT_BY_ID = "SELECT * FROM `patient` WHERE `id` = ?";
  12. private static final String UPDATE_PATIENT = "UPDATE `patient`" +
  13. "SET `CAVE`=?," +
  14. "`Vorname`=?," +
  15. "`Geburtsname`=?," +
  16. "`Nachname`=?," +
  17. "`Geburtsdatum`=?," +
  18. "`Geschlecht`=?," +
  19. "`Familienstand`=?," +
  20. "`Strasse`=?," +
  21. "`Hausnummer`=?," +
  22. "`PLZ`=?," +
  23. "`Ort`=?," +
  24. "`Telefon`=?," +
  25. "`KassenID`=?," +
  26. "`Versichertennummer`=?," +
  27. "`LetzterBearbeiter`=? " +
  28. "WHERE `ID`=?";
  29. private static final String INSERT_PATIENT = "INSERT INTO `patient`" +
  30. "(`CAVE`," +
  31. "`Vorname`," +
  32. "`Geburtsname`," +
  33. "`Nachname`," +
  34. "`Geburtsdatum`," +
  35. "`Geschlecht`," +
  36. "`Familienstand`," +
  37. "`Strasse`," +
  38. "`Hausnummer`," +
  39. "`PLZ`," +
  40. "`Ort`," +
  41. "`Telefon`," +
  42. "`KassenID`," +
  43. "`Versichertennummer`," +
  44. "`LetzterBearbeiter`," +
  45. "`Ersteller`)" +
  46. "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
  47. private static final String SELECT_ALL_STATIONEN = "SELECT * FROM `stammstation`";
  48. private static final String SELECT_FAELLE_BY_PATID = "SELECT * FROM `fall` WHERE `patientid` = ?";
  49. private static final String INSERT_FALL = "INSERT INTO `fall`" +
  50. "(`Aufnahmedatum`," +
  51. "`Entlassungsdatum`," +
  52. "`Vorstelldatum`," +
  53. "`EinweisenderArzt`," +
  54. "`Fallart`," +
  55. "`Selbsteinweisung`," +
  56. "`Hauptdiagnose`," +
  57. "`Versichertennummer`," +
  58. "`KassenID`," +
  59. "`storniert`," +
  60. "`LetzterBearbeiter`," +
  61. "`PatientID`," +
  62. "`Ersteller`)" +
  63. "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
  64. private static final String UPDATE_FALL = "UPDATE `fall`" +
  65. "SET `Aufnahmedatum`=?," +
  66. "`Entlassungsdatum`=?," +
  67. "`Vorstelldatum`=?," +
  68. "`EinweisenderArzt`=?," +
  69. "Fallart=?," +
  70. "`Selbsteinweisung`=?," +
  71. "Hauptdiagnose=?," +
  72. "`Versichertennummer`=?," +
  73. "KassenID=?," +
  74. "`storniert`=?," +
  75. "LetzterBearbeiter=? " +
  76. "WHERE `FallID`=?";
  77. private static final String SELECT_DIAGNOSE_BY_ID = "SELECT * FROM `diagnose` WHERE `diagid` = ?";
  78. private static final String SELECT_ALL_ICD10CODES = "SELECT * FROM `stammicd10`";
  79. private static final String SELECT_ALL_OPSCODES = "SELECT * FROM `stammops`";
  80. private static final String SELECT_ICD10CODE_BY_ID = "SELECT * FROM `stammicd10` WHERE `icd10code` = ? AND `version` = ?";
  81. private static final String SELECT_OPSCODE_BY_ID = "SELECT * FROM `stammops` WHERE `opscode` = ? AND `version` = ?";
  82. private static final String SELECT_ALL_MITARBEITER = "SELECT * FROM `mitarbeiter`";
  83. private static final String SELECT_UNTERS_BY_FALLID = "SELECT * FROM `untersuchung` WHERE `fallid` = ?";
  84. private static final String INSERT_UNTERSUCHUNG = "INSERT INTO `untersuchung`" +
  85. "(`DurchfuehrenderArzt`," +
  86. "`FallID`," +
  87. "`OPSCode`," +
  88. "`OPSVersion`," +
  89. "`storniert`," +
  90. "`Untersuchungsdatum`," +
  91. "`LetzterBearbeiter`," +
  92. "`Ersteller`)" +
  93. "VALUES (?, ?, ?, ?, ?, ?, ?, ?)";
  94. private static final String UPDATE_UNTERSUCHUNG = "UPDATE `untersuchung`" +
  95. "SET `DurchfuehrenderArzt`=?," +
  96. "`FallID`=?," +
  97. "`OPSCode`=?," +
  98. "`OPSVersion`=?," +
  99. "`storniert`=?," +
  100. "`Untersuchundatum`=?" +
  101. "`LetzterBearbeiter` " +
  102. "WHERE `UnterID`=?";
  103. private static final String SELECT_MITARBEITER_BY_ID = "SELECT * FROM `mitarbeiter` WHERE `mitarbid` = ?";
  104. private static final String SELECT_DIAGNOSE_BY_FALLID = "SELECT * FROM `diagnose` WHERE `fallid` = ?";
  105. private static final String SELECT_ALL_KASSEN = "SELECT * FROM `kasse`";
  106. private static final String SELECT_KASSE_BY_KASSENID = "SELECT * FROM `kasse` WHERE `kasse`.`KassenID` = ?";
  107. private static final String SELECT_STATHIST_BY_STATION = "SELECT * FROM `stationshistorie` WHERE `stationshistorie`.`Station` = ?";
  108. /**
  109. * Gibt alle {@link Patient} aus der DB zurueck.
  110. *
  111. * @return Liste aller {@link Patient}.
  112. * @throws SQLException wenn Fehler bei der SQL Verarbeitung auftreten.
  113. */
  114. public static List<Patient> getAllPatients() throws SQLException {
  115. Statement statement = MySqlConnFactory.getConnection().createStatement();
  116. ResultSet rs = statement.executeQuery(SELECT_ALL_PATIENTS);
  117. List<Patient> patients = new ArrayList<>();
  118. while (rs.next()) {
  119. patients.add(getPatient(rs));
  120. }
  121. return patients;
  122. }
  123. /**
  124. * Extrahiert ein Objekt {@link Patient} aus einem gegebenen {@link ResultSet}.
  125. *
  126. * @param rs ResultSet from Database Query.
  127. * @return {@link Patient}
  128. * @throws SQLException
  129. */
  130. private static Patient getPatient(ResultSet rs) throws SQLException {
  131. Patient patient = new Patient();
  132. patient.setPatID(rs.getInt("id"));
  133. patient.setGeburtsname(rs.getString("geburtsname"));
  134. patient.setVorname(rs.getString("vorname"));
  135. patient.setNachname(rs.getString("nachname"));
  136. if (rs.getDate("geburtsdatum") != null) {
  137. patient.setGeburtsdatum(rs.getDate("geburtsdatum").toLocalDate());
  138. }
  139. patient.setCave(rs.getString("cave"));
  140. patient.setStrasse(rs.getString("strasse"));
  141. patient.setHausnummer(rs.getString("hausnummer"));
  142. patient.setPlz(rs.getString("plz"));
  143. patient.setOrt(rs.getString("ort"));
  144. patient.setTelefon(rs.getString("telefon"));
  145. if (rs.getString("familienstand") != null) {
  146. patient.setFamilienstand(Patient.Familienstand.parseChar(rs.getString("familienstand").charAt(0)));
  147. }
  148. if (rs.getString("geschlecht") != null) {
  149. patient.setGeschlecht(Patient.Geschlecht.parseChar(rs.getString("geschlecht").charAt(0)));
  150. }
  151. patient.setVersichertennummer(rs.getString("versichertennummer"));
  152. patient.setKassenID(rs.getInt("kassenid"));
  153. setVersionInformation(patient, rs);
  154. return patient;
  155. }
  156. // TODO: Never used.
  157. public static Patient getPatient(int id) throws SQLException {
  158. PreparedStatement statement = MySqlConnFactory.getConnection().prepareStatement(SELECT_PATIENT_BY_ID);
  159. ResultSet rs;
  160. statement.setInt(1, id);
  161. rs = statement.executeQuery();
  162. return getPatient(rs);
  163. }
  164. /**
  165. * Fuehrt {@code INSERT} bei einem neuen Datensatz und {@code UPDATE} bei einem existierenden Datensatz aus.
  166. *
  167. * @param patient zu verarbeitender Datensatz.
  168. * @param mitarbid {@link Mitarbeiter#mitarbID} des aktuellen Benutzers/Mitarbeiters.
  169. * @param isUpdate {@code true} wenn der Datensatz bereits existiert, sonst {@code false}.
  170. * @throws SQLException wenn Fehler bei der SQL Verarbeitung auftreten.
  171. */
  172. public static void setPatient(Patient patient, int mitarbid, boolean isUpdate) throws SQLException {
  173. PreparedStatement statement;
  174. if (isUpdate) {
  175. statement = MySqlConnFactory.getConnection().prepareStatement(UPDATE_PATIENT);
  176. } else {
  177. statement = MySqlConnFactory.getConnection().prepareStatement(INSERT_PATIENT);
  178. }
  179. statement.setString(1, patient.getCave()); // CAVE
  180. statement.setString(2, patient.getVorname()); // Vorname
  181. statement.setString(3, patient.getGeburtsname()); // Geburtsname
  182. statement.setString(4, patient.getNachname()); // Nachname
  183. statement.setDate(5, Date.valueOf(patient.getGeburtsdatum())); // Geburtsdatum
  184. if (patient.getGeschlecht() != null) {
  185. statement.setString(6, String.valueOf(patient.getGeschlecht().id())); // Geschlecht
  186. } else {
  187. statement.setString(6, String.valueOf(Patient.Geschlecht.OTHER.id()));
  188. }
  189. if (patient.getFamilienstand() != null) {
  190. statement.setString(7, String.valueOf(patient.getFamilienstand().id()));// Familienstand
  191. } else {
  192. statement.setString(7, String.valueOf(Patient.Familienstand.LEDIG.id()));
  193. }
  194. statement.setString(8, patient.getStrasse()); // Strasse
  195. statement.setString(9, patient.getHausnummer()); // Hausnummer
  196. statement.setString(10, patient.getPlz()); // PLZ
  197. statement.setString(11, patient.getOrt()); // Ort
  198. statement.setString(12, patient.getTelefon()); // Telefon
  199. statement.setInt(13, patient.getKassenID()); // KassenID
  200. statement.setString(14, patient.getVersichertennummer()); // Versichertennummer
  201. statement.setInt(15, mitarbid); // LetzterBearbeiter
  202. if (!isUpdate) {
  203. statement.setInt(16, mitarbid); // Ersteller
  204. } else {
  205. statement.setInt(16, patient.getPatID()); // PatID (WHERE)
  206. }
  207. statement.execute();
  208. }
  209. public static List<Station> getAllStationen() throws SQLException {
  210. Statement statement = MySqlConnFactory.getConnection().createStatement();
  211. ResultSet rs = statement.executeQuery(SELECT_ALL_STATIONEN);
  212. List<Station> stationen = new ArrayList<>();
  213. while (rs.next()) {
  214. stationen.add(getStation(rs));
  215. }
  216. return stationen;
  217. }
  218. /**
  219. * Extrahiert ein Objekt {@link Station} aus einem gegebenen {@link ResultSet}.
  220. *
  221. * @param rs ResultSet from Database Query.
  222. * @return {@link Station}
  223. * @throws SQLException wenn Fehler bei der SQL Verarbeitung auftreten.
  224. */
  225. private static Station getStation(ResultSet rs) throws SQLException {
  226. Station station = new Station();
  227. station.setStation(rs.getString("station"));
  228. station.setBezeichnung(rs.getString("bezeichnung"));
  229. station.setBezeichnungLang(rs.getString("bezeichnunglang"));
  230. station.setStationstyp(rs.getInt("stationstyp"));
  231. return station;
  232. }
  233. public static List<StationsHistorie> getStationsHistorieByStation(String station) throws SQLException {
  234. PreparedStatement statement = MySqlConnFactory.getConnection().prepareStatement(SELECT_STATHIST_BY_STATION);
  235. statement.setString(1, station);
  236. ResultSet rs = statement.executeQuery();
  237. List<StationsHistorie> historie = new ArrayList<>();
  238. while (rs.next()) {
  239. historie.add(getStationsHistorie(rs));
  240. }
  241. return historie;
  242. }
  243. private static StationsHistorie getStationsHistorie(ResultSet rs) throws SQLException {
  244. StationsHistorie hist = new StationsHistorie();
  245. hist.setStatHistID(rs.getInt("stathistid"));
  246. if (rs.getTimestamp("aufnahmedatum") != null) {
  247. hist.setAufnahmeDatum(rs.getTimestamp("aufnahmedatum").toLocalDateTime());
  248. }
  249. if (rs.getTimestamp("entlassungsdatum") != null) {
  250. hist.setEntlassungsDatum(rs.getTimestamp("entlassungsdatum").toLocalDateTime());
  251. }
  252. // TODO: Muss das jeweils das Objekt sein?
  253. // hist.setFall(null);
  254. // hist.setStation(null);
  255. return hist;
  256. }
  257. public static List<Fall> getFaelleByPatID(int id) throws SQLException {
  258. PreparedStatement statement = MySqlConnFactory.getConnection().prepareStatement(SELECT_FAELLE_BY_PATID);
  259. statement.setInt(1, id);
  260. ResultSet rs = statement.executeQuery();
  261. List<Fall> faelle = new ArrayList<>();
  262. while (rs.next()) {
  263. faelle.add(getFall(rs));
  264. }
  265. return faelle;
  266. }
  267. /**
  268. * Extrahiert ein Objekt {@link Fall} aus einem gegebenen {@link ResultSet}.
  269. *
  270. * @param rs ResultSet from Database Query.
  271. * @return {@link Fall}
  272. * @throws SQLException wenn Fehler bei der SQL Verarbeitung auftreten.
  273. */
  274. private static Fall getFall(ResultSet rs) throws SQLException {
  275. Fall fall = new Fall();
  276. fall.setFallID(rs.getInt("fallid"));
  277. if (rs.getTimestamp("aufnahmedatum") != null) {
  278. fall.setAufnahmeDatum(rs.getTimestamp("aufnahmedatum").toLocalDateTime());
  279. }
  280. if (rs.getTimestamp("entlassungsdatum") != null) {
  281. fall.setEntlassungsDatum(rs.getTimestamp("entlassungsdatum").toLocalDateTime());
  282. }
  283. if (rs.getInt("hauptdiagnose") != 0) {
  284. fall.setHauptDiagnose(getDiagnose(rs.getInt("hauptdiagnose"), fall));
  285. }
  286. if (rs.getString("versichertennummer") != null) {
  287. fall.setVersichertenNummer(rs.getString("versichertennummer"));
  288. }
  289. if (rs.getInt("kassenid") != 0) {
  290. fall.setKasse(getKasse(rs.getInt("kassenid")));
  291. }
  292. fall.setFallArt(FallArt.parseString(rs.getString("fallart")));
  293. return fall;
  294. }
  295. /**
  296. * Fuehrt {@code INSERT} bei einem neuen Datensatz und {@code UPDATE} bei einem existierenden Datensatz aus.
  297. *
  298. * @param fall zu verarbeitender Datensatz.
  299. * @param mitarbid {@link Mitarbeiter#mitarbID} des aktuellen Benutzers/Mitarbeiters.
  300. * @param isUpdate {@code true} wenn der Datensatz bereits existiert, sonst {@code false}.
  301. * @throws SQLException wenn Fehler bei der SQL Verarbeitung auftreten.
  302. */
  303. public static void setFall(Fall fall, int mitarbid, boolean isUpdate) throws SQLException {
  304. PreparedStatement statement;
  305. if (isUpdate) {
  306. statement = MySqlConnFactory.getConnection().prepareStatement(UPDATE_FALL);
  307. } else {
  308. statement = MySqlConnFactory.getConnection().prepareStatement(INSERT_FALL);
  309. }
  310. if (fall.getAufnahmeDatum() != null) {
  311. statement.setTimestamp(1, Timestamp.valueOf(fall.getAufnahmeDatum())); // Aufnahmedatum
  312. } else {
  313. statement.setTimestamp(1, null);
  314. }
  315. if (fall.getEntlassungsDatum() != null) {
  316. statement.setTimestamp(2, Timestamp.valueOf(fall.getEntlassungsDatum())); // Entlassungsdatum
  317. } else {
  318. statement.setTimestamp(2, null);
  319. }
  320. if (fall.getVorstellDatum() != null) {
  321. statement.setTimestamp(3, Timestamp.valueOf(fall.getVorstellDatum())); // Vorstelldatum
  322. } else {
  323. statement.setTimestamp(3, null);
  324. }
  325. if (fall.getEinweisenderArzt() != null) {
  326. statement.setInt(4, fall.getEinweisenderArzt().getMitarbID()); // EinweisenderArzt
  327. } else {
  328. statement.setTimestamp(4, null);
  329. }
  330. if (fall.getFallArt() != null) {
  331. statement.setString(5, fall.getFallArt().id()); // Fallart
  332. } else {
  333. statement.setString(5, null);
  334. }
  335. statement.setBoolean(6, fall.getSelbsteinweisung()); // Selbsteinweisung
  336. if (fall.getHauptDiagnose() != null) {
  337. statement.setInt(7, fall.getHauptDiagnose().getDiagID()); // Hauptdiagnose
  338. } else {
  339. statement.setTimestamp(7, null);
  340. }
  341. statement.setString(8, fall.getVersichertenNummer()); // Versichertennummer
  342. if (fall.getKasse() != null) {
  343. statement.setInt(9, fall.getKasse().getKassenID()); // KassenID
  344. } else {
  345. statement.setTimestamp(9, null);
  346. }
  347. statement.setBoolean(10, fall.getStorniert()); // storniert
  348. statement.setInt(11, mitarbid); // Letzter Bearbeiter
  349. if (!isUpdate) {
  350. statement.setInt(12, fall.getPatient().getPatID()); // PatientID
  351. statement.setInt(13, mitarbid); // Ersteller
  352. }
  353. if (isUpdate) {
  354. statement.setInt(12, fall.getFallID());
  355. }
  356. statement.execute();
  357. }
  358. /**
  359. * Fuehrt {@code INSERT} eines neuen Datensatz durch.
  360. * @param fall zu verarbeitender Datensatz.
  361. * @param mitarbid {@link Mitarbeiter#mitarbID} des aktuellen Benutzers/Mitarbeiters.
  362. * @throws SQLException wenn Fehler bei der SQL Verarbeitung auftreten.
  363. */
  364. public static void setFall(Fall fall, int mitarbid) throws SQLException {
  365. setFall(fall, mitarbid, false);
  366. }
  367. private static Diagnose getDiagnose(int diagid, Fall fall) throws SQLException {
  368. Diagnose diagnose = getDiagnose(diagid);
  369. diagnose.setFall(fall);
  370. return diagnose;
  371. }
  372. private static Diagnose getDiagnose(int id) throws SQLException {
  373. PreparedStatement statement = MySqlConnFactory.getConnection().prepareStatement(SELECT_DIAGNOSE_BY_ID);
  374. statement.setInt(1, id);
  375. ResultSet rs = statement.executeQuery();
  376. rs.next(); // TODO
  377. return getDiagnose(rs);
  378. }
  379. /**
  380. * Extrahiert ein Objekt {@link Diagnose} aus einem gegebenen {@link ResultSet}.
  381. *
  382. * @param rs ResultSet from Database Query.
  383. * @return {@link Diagnose}
  384. * @throws SQLException wenn Fehler bei der SQL Verarbeitung auftreten.
  385. */
  386. private static Diagnose getDiagnose(ResultSet rs) throws SQLException {
  387. Diagnose diagnose = new Diagnose();
  388. diagnose.setFreiText(rs.getString("freitext"));
  389. diagnose.setArzt(new Mitarbeiter(rs.getInt("arzt")));
  390. diagnose.setDiagArt(DiagArt.parseInt(rs.getInt("diagart")));
  391. setVersionInformation(diagnose, rs);
  392. diagnose.setIcd10code(getIcd10Code(rs.getString("icd10code"), rs.getInt("icd10version")));
  393. return diagnose;
  394. }
  395. private static void setVersionInformation(Version version, ResultSet rs) throws SQLException {
  396. version.setErsteller(rs.getInt("ersteller"));
  397. if (rs.getTimestamp("erstelldatum") != null) {
  398. version.setErstellDatumZeit(rs.getTimestamp("erstelldatum").toLocalDateTime());
  399. }
  400. version.setBearbeiter(rs.getInt("letzterbearbeiter"));
  401. if (rs.getTimestamp("letztesbearbeitungsdatum") != null) {
  402. version.setBearbeitetDatumZeit(rs.getTimestamp("letztesbearbeitungsdatum").toLocalDateTime());
  403. }
  404. }
  405. public static List<Icd10Code> getAllIcd10Codes() throws SQLException {
  406. Statement statement = MySqlConnFactory.getConnection().createStatement();
  407. ResultSet rs = statement.executeQuery(SELECT_ALL_ICD10CODES);
  408. List<Icd10Code> icd10codes = new ArrayList<>();
  409. while (rs.next()) {
  410. icd10codes.add(getIcd10Code(rs));
  411. }
  412. return icd10codes;
  413. }
  414. private static Icd10Code getIcd10Code(String code, int version) throws SQLException {
  415. PreparedStatement statement = MySqlConnFactory.getConnection().prepareStatement(SELECT_ICD10CODE_BY_ID);
  416. ResultSet rs;
  417. statement.setString(1, code);
  418. statement.setInt(2, version);
  419. rs = statement.executeQuery();
  420. rs.next(); // TODO
  421. return getIcd10Code(rs);
  422. }
  423. /**
  424. * Extrahiert ein Objekt {@link Icd10Code} aus einem gegebenen {@link ResultSet}.
  425. *
  426. * @param rs ResultSet from Database Query.
  427. * @return {@link Icd10Code}
  428. * @throws SQLException wenn Fehler bei der SQL Verarbeitung auftreten.
  429. */
  430. private static Icd10Code getIcd10Code(ResultSet rs) throws SQLException {
  431. String code = rs.getString("icd10code");
  432. String text = rs.getString("text");
  433. int version = rs.getInt("version");
  434. return new Icd10Code(code, text, version);
  435. }
  436. public static List<OpsCode> getAllOpsCodes() throws SQLException {
  437. Statement statement = MySqlConnFactory.getConnection().createStatement();
  438. ResultSet rs = statement.executeQuery(SELECT_ALL_OPSCODES);
  439. List<OpsCode> opscodes = new ArrayList<>();
  440. while (rs.next()) {
  441. opscodes.add(getOpsCode(rs));
  442. }
  443. return opscodes;
  444. }
  445. private static OpsCode getOpsCode(String code, int version) throws SQLException {
  446. PreparedStatement statement = MySqlConnFactory.getConnection().prepareStatement(SELECT_OPSCODE_BY_ID);
  447. ResultSet rs;
  448. statement.setString(1, code);
  449. statement.setInt(2, version);
  450. rs = statement.executeQuery();
  451. rs.next(); // TODO
  452. return getOpsCode(rs);
  453. }
  454. /**
  455. * Extrahiert ein Objekt {@link OpsCode} aus einem gegebenen {@link ResultSet}.
  456. *
  457. * @param rs ResultSet from Database Query.
  458. * @return {@link OpsCode}
  459. * @throws SQLException wenn Fehler bei der SQL Verarbeitung auftreten.
  460. */
  461. private static OpsCode getOpsCode(ResultSet rs) throws SQLException {
  462. String code = rs.getString("opscode");
  463. String text = rs.getString("text");
  464. int version = rs.getInt("version");
  465. return new OpsCode(code, text, version);
  466. }
  467. public static List<Mitarbeiter> getAllMitarbeiter() throws SQLException {
  468. Statement statement = MySqlConnFactory.getConnection().createStatement();
  469. ResultSet rs = statement.executeQuery(SELECT_ALL_MITARBEITER);
  470. List<Mitarbeiter> mitarbeiters = new ArrayList<>();
  471. while (rs.next()) {
  472. mitarbeiters.add(getMitarbeiter(rs));
  473. }
  474. return mitarbeiters;
  475. }
  476. private static Mitarbeiter getMitarbeiter(int id) throws SQLException {
  477. PreparedStatement statement = MySqlConnFactory.getConnection().prepareStatement(SELECT_MITARBEITER_BY_ID);
  478. ResultSet rs;
  479. statement.setInt(1, id);
  480. rs = statement.executeQuery();
  481. rs.next(); // TODO
  482. return getMitarbeiter(rs);
  483. }
  484. /**
  485. * Extrahiert ein Objekt {@link Mitarbeiter} aus einem gegebenen {@link ResultSet}.
  486. *
  487. * @param rs ResultSet from Database Query.
  488. * @return {@link Mitarbeiter}
  489. * @throws SQLException wenn Fehler bei der SQL Verarbeitung auftreten.
  490. */
  491. private static Mitarbeiter getMitarbeiter(ResultSet rs) throws SQLException {
  492. Mitarbeiter mitarbeiter = new Mitarbeiter(rs.getInt("mitarbid"));
  493. mitarbeiter.setTitel(rs.getString("titel"));
  494. mitarbeiter.setVorname(rs.getString("vorname"));
  495. mitarbeiter.setNachname(rs.getString("nachname"));
  496. mitarbeiter.setEinweisenderArzt(rs.getString("einweisenderarzt"));
  497. return mitarbeiter;
  498. }
  499. /**
  500. * Gibt gibt alle {@link Untersuchung} zu einem {@link Fall} aus.
  501. *
  502. * @param fall Parent {@link Fall}
  503. * @return Liste aller {@link Untersuchung} zu einem {@link Fall}.
  504. * @throws SQLException wenn Fehler bei der SQL Verarbeitung auftreten.
  505. */
  506. public static List<Untersuchung> getUntersuchungByFall(Fall fall) throws SQLException {
  507. PreparedStatement statement = MySqlConnFactory.getConnection().prepareStatement(SELECT_UNTERS_BY_FALLID);
  508. statement.setInt(1, fall.getFallID());
  509. ResultSet rs = statement.executeQuery();
  510. List<Untersuchung> untersuchungen = new ArrayList<>();
  511. while (rs.next()) {
  512. untersuchungen.add(getUntersuchung(rs, fall));
  513. }
  514. return untersuchungen;
  515. }
  516. private static Untersuchung getUntersuchung(ResultSet rs, Fall fall) throws SQLException {
  517. Untersuchung untersuchung = new Untersuchung();
  518. untersuchung.setUntersID(rs.getInt("untersid"));
  519. untersuchung.setFall(fall);
  520. untersuchung.setDurchfuehrenderArzt(getMitarbeiter(rs.getInt("durchfuehrenderarzt")));
  521. untersuchung.setUntersuchungsdatum(rs.getTimestamp("untersuchungsdatum").toLocalDateTime());
  522. untersuchung.setOpscode(getOpsCode(rs.getString("opscode"), rs.getInt("opsversion")));
  523. setVersionInformation(untersuchung, rs);
  524. return untersuchung;
  525. }
  526. /**
  527. * Fuehrt {@code INSERT} bei einem neuen Datensatz und {@code UPDATE} bei einem existierenden Datensatz aus.
  528. *
  529. * @param untersuchung zu verarbeitender Datensatz.
  530. * @param mitarbid {@link Mitarbeiter#mitarbID} des aktuellen Benutzers/Mitarbeiters.
  531. * @param isUpdate {@code true} wenn der Datensatz bereits existiert, sonst {@code false}.
  532. * @throws SQLException wenn Fehler bei der SQL Verarbeitung auftreten.
  533. */
  534. public static void setUntersuchung(Untersuchung untersuchung, int mitarbid, boolean isUpdate) throws SQLException {
  535. PreparedStatement statement;
  536. if (isUpdate) {
  537. statement = MySqlConnFactory.getConnection().prepareStatement(UPDATE_UNTERSUCHUNG);
  538. } else {
  539. statement = MySqlConnFactory.getConnection().prepareStatement(INSERT_UNTERSUCHUNG);
  540. }
  541. statement.setInt(1, untersuchung.getDurchfuehrenderArzt().getMitarbID()); // DurchfuehrenderArzt
  542. statement.setInt(2, untersuchung.getFall().getFallID()); // FallID
  543. statement.setString(3, untersuchung.getOpscode().getOpsCode()); // OPSCode
  544. statement.setInt(4, untersuchung.getOpscode().getVersion()); // OPSVersion
  545. statement.setBoolean(5, untersuchung.getStorniert()); // storniert
  546. statement.setTimestamp(6, Timestamp.valueOf(untersuchung.getUntersuchungsdatum())); // Untersuchungsdatum
  547. statement.setInt(7, mitarbid); // Letzter Bearbeiter
  548. if (!isUpdate) {
  549. statement.setInt(8, mitarbid); // Ersteller
  550. }
  551. statement.execute();
  552. }
  553. public static List<Diagnose> getDiagnosenByFall(Fall fall) throws SQLException {
  554. PreparedStatement statement = MySqlConnFactory.getConnection().prepareStatement(SELECT_DIAGNOSE_BY_FALLID);
  555. statement.setInt(1, fall.getFallID());
  556. ResultSet rs = statement.executeQuery();
  557. List<Diagnose> diagnosen = new ArrayList<>();
  558. while (rs.next()) {
  559. diagnosen.add(getDiagnose(rs.getInt("diagid"), fall));
  560. }
  561. return diagnosen;
  562. }
  563. public static List<Kasse> getAllKassen() throws SQLException {
  564. Statement statement = MySqlConnFactory.getConnection().createStatement();
  565. ResultSet rs = statement.executeQuery(SELECT_ALL_KASSEN);
  566. List<Kasse> kassen = new ArrayList<>();
  567. while (rs.next()) {
  568. kassen.add(getKasse(rs));
  569. }
  570. return kassen;
  571. }
  572. private static Kasse getKasse(int kassenid) throws SQLException {
  573. PreparedStatement statement = MySqlConnFactory.getConnection().prepareStatement(SELECT_KASSE_BY_KASSENID);
  574. statement.setInt(1, kassenid);
  575. ResultSet rs = statement.executeQuery();
  576. rs.next(); // TODO
  577. return getKasse(rs);
  578. }
  579. /**
  580. * Extrahiert ein Objekt {@link Kasse} aus einem gegebenen {@link ResultSet}.
  581. *
  582. * @param rs ResultSet from Database Query.
  583. * @return {@link Kasse}
  584. * @throws SQLException wenn Fehler bei der SQL Verarbeitung auftreten.
  585. */
  586. private static Kasse getKasse(ResultSet rs) throws SQLException {
  587. Kasse kasse = new Kasse();
  588. kasse.setKassenID(rs.getInt("kassenid"));
  589. kasse.setName(rs.getString("name"));
  590. kasse.setAdresse(rs.getString("adresse"));
  591. kasse.setPrivat(rs.getBoolean("privat"));
  592. setVersionInformation(kasse, rs);
  593. return kasse;
  594. }
  595. }