Im Rahmen der Veranstaltung "CS3330 - Projektpraktikum MedizinischeInformatik" an der Universität zu Lübeck entstandenes Krankenhausinformationssystem (KIS).
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

493 行
22 KiB

  1. package de.uniluebeck.mi.projmi6.db;
  2. import de.uniluebeck.mi.projmi6.model.*;
  3. import java.sql.*;
  4. import java.sql.Date;
  5. import java.util.*;
  6. /**
  7. * Created by nils on 15.11.2015.
  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. "`Familienstand`=?," +
  15. "`Geburtsdatum`=?," +
  16. "`Geburtsname`=?," +
  17. "`Geschlecht`=?," + // TODO: Hausnummer fehlt
  18. "`KassenID`=?," +
  19. "`LetzterBearbeiter`=?," +
  20. "`Nachname`=?," +
  21. "`Ort`=?," +
  22. "`PLZ`=?," +
  23. "`Strasse`=?," +
  24. "`Telefon`=?," +
  25. "`Versichertennummer`=?," +
  26. "`Vorname`=?" +
  27. "WHERE `ID`=?";
  28. private static final String INSERT_PATIENT = "INSERT INTO `patient` " +
  29. "(`CAVE`," +
  30. "`Familienstand`," +
  31. "`Geburtsdatum`," +
  32. "`Geburtsname`," +
  33. "`Geschlecht`," +
  34. "`Hausnummer`," +
  35. "`KassenID`," +
  36. "`LetzterBearbeiter`," +
  37. "`Nachname`," +
  38. "`Ort`," +
  39. "`PLZ`," +
  40. "`Strasse`," +
  41. "`Telefon`," +
  42. "`Versichertennummer`," +
  43. "`Vorname`," +
  44. "`Ersteller`)" +
  45. "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
  46. private static final String SELECT_ALL_STATIONEN = "SELECT * FROM `stammstation`";
  47. private static final String SELECT_FAELLE_BY_PATID = "SELECT * FROM `fall` WHERE `patientid` = ?";
  48. private static final String INSERT_FALL = "INSERT INTO `fall` " +
  49. "(`Aufnahmedatum`," +
  50. "`Entlassungsdatum`," +
  51. "`Vorstelldatum`," +
  52. "`EinweisenderArzt`," +
  53. "`Fallart`," +
  54. "`Selbsteinweisung`," +
  55. "`Hauptdiagnose`," +
  56. "`PatientID`," +
  57. "`Versichertennummer`," +
  58. "`KassenID`," +
  59. "`storniert`," +
  60. "`Letzter Bearbeiter`" +
  61. "`Ersteller`)," +
  62. "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
  63. private static final String UPDATE_FALL = "UPDATE `fall`" +
  64. "SET `Aufnahmedatum`=?," +
  65. "`Entlassungsdatum`=?," +
  66. "`Vorstelldatum`=?" +
  67. "`EinweisenderArzt`=?," +
  68. "Fallart=?," +
  69. "`Selbsteinweisung`=?," +
  70. "Hauptdiagnose=?," +
  71. "`PatientID`=?," +
  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 SELECT_MITARBEITER_BY_ID = "SELECT * FROM `mitarbeiter` WHERE `mitarbid` = ?";
  85. private static final String SELECT_DIAGNOSE_BY_FALLID = "SELECT * FROM `diagnose` WHERE `fallid` = ?";
  86. private static final String SELECT_ALL_KASSEN = "SELECT * FROM `kasse`";
  87. public static List<Patient> getAllPatients() throws SQLException {
  88. Statement statement = MySqlConnFactory.getConnection().createStatement();
  89. ResultSet rs = statement.executeQuery(SELECT_ALL_PATIENTS);
  90. List<Patient> patients = new ArrayList<>();
  91. while (rs.next()) {
  92. patients.add(getPatient(rs));
  93. }
  94. return patients;
  95. }
  96. public static Patient getPatient(int id) throws SQLException {
  97. PreparedStatement statement = MySqlConnFactory.getConnection().prepareStatement(SELECT_PATIENT_BY_ID);
  98. ResultSet rs;
  99. statement.setInt(1, id);
  100. rs = statement.executeQuery();
  101. return getPatient(rs);
  102. }
  103. private static Patient getPatient(ResultSet rs) throws SQLException {
  104. Patient patient = new Patient();
  105. patient.setPatID(rs.getInt("id"));
  106. patient.setGeburtsname(rs.getString("geburtsname"));
  107. patient.setVorname(rs.getString("vorname"));
  108. patient.setNachname(rs.getString("nachname"));
  109. if (rs.getDate("geburtsdatum") != null)
  110. patient.setGeburtsdatum(rs.getDate("geburtsdatum").toLocalDate());
  111. patient.setStrasse(rs.getString("strasse"));
  112. patient.setHausnummer(rs.getString("hausnummer"));
  113. patient.setPlz(rs.getString("plz"));
  114. patient.setTelefon(rs.getString("telefon"));
  115. // patient.setFamilienstand(rs.getString("familienstand")); TODO
  116. // patient.setGeschlecht(Patient.Geschlecht.valueOf(rs.getString("geschlecht"))); TODO
  117. patient.setVersichertennummer(rs.getString("versichertennummer"));
  118. patient.setKassenID(rs.getInt("kassenid"));
  119. setVersionInformation(patient, rs);
  120. return patient;
  121. }
  122. // TODO: Defaultwerte entfernen und so.
  123. public static void updatePatient(Patient patient, int mitarbid) throws SQLException {
  124. PreparedStatement statement = MySqlConnFactory.getConnection().prepareStatement(UPDATE_PATIENT);
  125. statement.setString(1, patient.getCave()); // CAVE
  126. if (patient.getFamilienstand() != null)
  127. statement.setString(2, patient.getFamilienstand().toString()); // Familienstand
  128. else
  129. statement.setString(2, "l");
  130. statement.setDate(3, Date.valueOf(patient.getGeburtsdatum())); // Geburtsdatum
  131. statement.setString(4, patient.getGeburtsname()); // Geburtsname
  132. if (patient.getGeschlecht() != null)
  133. statement.setString(5, String.valueOf(patient.getGeschlecht().id())); // Geschlecht
  134. else
  135. statement.setString(5, "o");
  136. // statement.setInt(6, patient.getKassenID()); // KasseId
  137. statement.setInt(6, 1); // KasseId
  138. statement.setInt(7, mitarbid); // Letzterbearbeiter
  139. statement.setString(8, patient.getNachname()); // Nachname
  140. statement.setString(9, patient.getOrt()); // Ort
  141. statement.setString(10, patient.getPlz()); // PLZ
  142. statement.setString(11, patient.getStrasse()); // Strasse
  143. statement.setString(12, patient.getTelefon()); // telefon
  144. statement.setString(13, patient.getVersichertennummer()); // versichertennummer
  145. statement.setString(14, patient.getVorname()); // vorname
  146. statement.setInt(15, patient.getPatID()); // patid
  147. System.out.println(statement.toString());
  148. statement.executeUpdate();
  149. }
  150. public static void insertPatient(Patient patient, int mitarbid) throws SQLException {
  151. PreparedStatement statement = MySqlConnFactory.getConnection().prepareStatement(INSERT_PATIENT);
  152. statement.setString(1, patient.getCave()); // `CAVE`
  153. if (patient.getFamilienstand() != null)
  154. statement.setString(2, String.valueOf(patient.getFamilienstand().id())); // `Familienstand`
  155. else
  156. statement.setString(2, "l");
  157. statement.setDate(3, Date.valueOf(patient.getGeburtsdatum())); // `Geburtdatum`
  158. statement.setString(4, patient.getGeburtsname()); // `Geburtsname`
  159. if (patient.getGeschlecht() != null)
  160. statement.setString(5, String.valueOf(patient.getGeschlecht().id())); // `Geschlecht`
  161. else
  162. statement.setString(5, "o");
  163. statement.setString(6, patient.getHausnummer()); // `Hausnummer`
  164. //statement.setInt(7, patient.getKassenID()); // `KassenID`
  165. statement.setInt(7, 1); // `KassenID`
  166. statement.setInt(8, mitarbid); // `LetzterBearbeiter`
  167. statement.setString(9, patient.getNachname()); // `Nachname`
  168. statement.setString(10, patient.getOrt()); // `Ort`
  169. statement.setString(11, patient.getPlz()); // `PLZ`
  170. statement.setString(12, patient.getStrasse()); // `Strasse`
  171. statement.setString(13, patient.getTelefon()); // `Telefon`
  172. statement.setString(14, patient.getVersichertennummer()); // `Versichertennummer`
  173. statement.setString(15, patient.getVorname()); // `Vorname`
  174. statement.setInt(16, mitarbid); // `Ersteller`
  175. System.out.println(statement.toString());
  176. statement.execute();
  177. }
  178. public static List<Station> getAllStationen() throws SQLException {
  179. Statement statement = MySqlConnFactory.getConnection().createStatement();
  180. ResultSet rs = statement.executeQuery(SELECT_ALL_STATIONEN);
  181. List<Station> stationen = new ArrayList<>();
  182. while (rs.next()) {
  183. stationen.add(getStation(rs));
  184. }
  185. return stationen;
  186. }
  187. private static Station getStation(ResultSet rs) throws SQLException {
  188. Station station = new Station();
  189. station.setStation(rs.getString("station"));
  190. station.setBezeichnung(rs.getString("bezeichnung"));
  191. station.setBezeichnungLang(rs.getString("bezeichnunglang"));
  192. station.setStationstyp(rs.getInt("stationstyp"));
  193. return station;
  194. }
  195. public static List<Fall> getFaelleByPatID(int id) throws SQLException {
  196. PreparedStatement statement = MySqlConnFactory.getConnection().prepareStatement(SELECT_FAELLE_BY_PATID);
  197. statement.setInt(1, id);
  198. ResultSet rs = statement.executeQuery();
  199. List<Fall> faelle = new ArrayList<>();
  200. while (rs.next()) {
  201. faelle.add(getFall(rs));
  202. }
  203. return faelle;
  204. }
  205. private static Fall getFall(ResultSet rs) throws SQLException {
  206. Fall fall = new Fall();
  207. fall.setFallID(rs.getInt("fallid"));
  208. if (rs.getTimestamp("aufnahmedatum") != null)
  209. fall.setAufnahmeDatum(rs.getTimestamp("aufnahmedatum").toLocalDateTime());
  210. if (rs.getTimestamp("entlassungsdatum") != null)
  211. fall.setEntlassungsDatum(rs.getTimestamp("entlassungsdatum").toLocalDateTime());
  212. if (rs.getInt("hauptdiagnose") != 0)
  213. fall.setHauptDiagnose(getDiagnose(rs.getInt("hauptdiagnose"), fall));
  214. return fall;
  215. }
  216. // TODO: Mach eins aus insert und update (boolean Flag in die Methode)
  217. // private static void setInsertFall(Fall fall, int mitarbid, boolean isUpdate) {
  218. public static void insertFall(Fall fall, int mitarbid) throws SQLException {
  219. /*PreparedStatement statement;
  220. if (isUpdate) {
  221. statement = MySqlConnFactory.getConnection().prepareStatement(INSERT_FALL);
  222. } else {
  223. statement = MySqlConnFactory.getConnection().prepareStatement(INSERT_FALL);
  224. }*/
  225. PreparedStatement statement = MySqlConnFactory.getConnection().prepareStatement(INSERT_FALL);
  226. if (fall.getAufnahmeDatum() != null)
  227. statement.setTimestamp(1, Timestamp.valueOf(fall.getAufnahmeDatum())); // Aufnahmedatum
  228. if (fall.getEntlassungsDatum() != null)
  229. statement.setTimestamp(2, Timestamp.valueOf(fall.getEntlassungsDatum())); // Entlassungsdatum
  230. if (fall.getVorstellDatum() != null)
  231. statement.setTimestamp(3, Timestamp.valueOf(fall.getVorstellDatum())); // Vorstelldatum
  232. if (fall.getEinweisenderArzt() != null)
  233. statement.setInt(4, fall.getEinweisenderArzt().getMitarbID()); // EinweisenderArzt
  234. statement.setString(5, fall.getFallArt().id()); // Fallart
  235. statement.setBoolean(6, fall.getSelbsteinweisung()); // Selbsteinweisung
  236. if (fall.getHauptDiagnose() != null)
  237. statement.setInt(7, fall.getHauptDiagnose().getDiagID()); // Hauptdiagnose
  238. statement.setInt(8, fall.getPatient().getPatID()); // PatientID
  239. statement.setString(9, fall.getVersichertenNummer()); // Versichertennummer
  240. if (fall.getKasse() != null)
  241. statement.setInt(10, fall.getKasse().getKassenID()); // KassenID
  242. statement.setBoolean(11, fall.getStorniert()); // storniert
  243. statement.setInt(12, mitarbid); // Letzter Bearbeiter
  244. // if (!isUpdate)
  245. statement.setInt(13, mitarbid); // Ersteller
  246. statement.execute();
  247. }
  248. // TODO: Kann dann weg.
  249. public static void updateFall(Fall fall, int mitarbid) throws SQLException {
  250. PreparedStatement statement = MySqlConnFactory.getConnection().prepareStatement(UPDATE_FALL);
  251. if (fall.getAufnahmeDatum() != null)
  252. statement.setTimestamp(1, Timestamp.valueOf(fall.getAufnahmeDatum())); // Aufnahmedatum
  253. if (fall.getEntlassungsDatum() != null)
  254. statement.setTimestamp(2, Timestamp.valueOf(fall.getEntlassungsDatum())); // Entlassungsdatum
  255. if (fall.getVorstellDatum() != null)
  256. statement.setTimestamp(3, Timestamp.valueOf(fall.getVorstellDatum())); // Vorstelldatum
  257. if (fall.getEinweisenderArzt() != null)
  258. statement.setInt(4, fall.getEinweisenderArzt().getMitarbID()); // EinweisenderArzt
  259. statement.setString(5, fall.getFallArt().id()); // Fallart
  260. statement.setBoolean(6, fall.getSelbsteinweisung()); // Selbsteinweisung
  261. if (fall.getHauptDiagnose() != null)
  262. statement.setInt(7, fall.getHauptDiagnose().getDiagID()); // Hauptdiagnose
  263. statement.setInt(8, fall.getPatient().getPatID()); // PatientID
  264. statement.setString(9, fall.getVersichertenNummer()); // Versichertennummer
  265. if (fall.getKasse() != null)
  266. statement.setInt(10, fall.getKasse().getKassenID()); // KassenID
  267. statement.setBoolean(11, fall.getStorniert()); // storniert
  268. statement.setInt(12, mitarbid); // Letzter Bearbeiter
  269. statement.execute();
  270. }
  271. private static Diagnose getDiagnose(int diagid, Fall fall) throws SQLException {
  272. Diagnose diagnose = getDiagnose(diagid);
  273. diagnose.setFall(fall);
  274. return diagnose;
  275. }
  276. private static Diagnose getDiagnose(int id) throws SQLException {
  277. PreparedStatement statement = MySqlConnFactory.getConnection().prepareStatement(SELECT_DIAGNOSE_BY_ID);
  278. statement.setInt(1, id);
  279. ResultSet rs = statement.executeQuery();
  280. rs.next(); // TODO
  281. return getDiagnose(rs);
  282. }
  283. private static Diagnose getDiagnose(ResultSet rs) throws SQLException {
  284. Diagnose diagnose = new Diagnose();
  285. diagnose.setFreiText(rs.getString("freitext"));
  286. diagnose.setArzt(new Mitarbeiter(rs.getInt("arzt")));
  287. diagnose.setDiagArt(DiagArt.parseInt(rs.getInt("diagart")));
  288. setVersionInformation(diagnose, rs);
  289. diagnose.setIcd10code(getIcd10Code(rs.getString("icd10code"), rs.getInt("icd10version")));
  290. return diagnose;
  291. }
  292. private static void setVersionInformation(Version version, ResultSet rs) throws SQLException {
  293. version.setErsteller(rs.getInt("ersteller"));
  294. if (rs.getTimestamp("erstelldatum") != null)
  295. version.setErstellDatumZeit(rs.getTimestamp("erstelldatum").toLocalDateTime());
  296. version.setBearbeiter(rs.getInt("letzterbearbeiter"));
  297. if (rs.getTimestamp("letztesbearbeitungsdatum") != null)
  298. version.setBearbeitetDatumZeit(rs.getTimestamp("letztesbearbeitungsdatum").toLocalDateTime());
  299. }
  300. public static List<Icd10Code> getAllIcd10Codes() throws SQLException {
  301. Statement statement = MySqlConnFactory.getConnection().createStatement();
  302. ResultSet rs = statement.executeQuery(SELECT_ALL_ICD10CODES);
  303. List<Icd10Code> icd10codes = new ArrayList<>();
  304. while (rs.next()) {
  305. icd10codes.add(getIcd10Code(rs));
  306. }
  307. return icd10codes;
  308. }
  309. private static Icd10Code getIcd10Code(String code, int version) throws SQLException {
  310. PreparedStatement statement = MySqlConnFactory.getConnection().prepareStatement(SELECT_ICD10CODE_BY_ID);
  311. ResultSet rs;
  312. statement.setString(1, code);
  313. statement.setInt(2, version);
  314. rs = statement.executeQuery();
  315. rs.next(); // TODO
  316. return getIcd10Code(rs);
  317. }
  318. private static Icd10Code getIcd10Code(ResultSet rs) throws SQLException {
  319. String code = rs.getString("icd10code");
  320. String text = rs.getString("text");
  321. int version = rs.getInt("version");
  322. return new Icd10Code(code, text, version);
  323. }
  324. public static List<OpsCode> getAllOpsCodes() throws SQLException {
  325. Statement statement = MySqlConnFactory.getConnection().createStatement();
  326. ResultSet rs = statement.executeQuery(SELECT_ALL_OPSCODES);
  327. List<OpsCode> opscodes = new ArrayList<>();
  328. while (rs.next()) {
  329. opscodes.add(getOpsCode(rs));
  330. }
  331. return opscodes;
  332. }
  333. public static OpsCode getOpsCode(String code, int version) throws SQLException {
  334. PreparedStatement statement = MySqlConnFactory.getConnection().prepareStatement(SELECT_OPSCODE_BY_ID);
  335. ResultSet rs;
  336. statement.setString(1, code);
  337. statement.setInt(2, version);
  338. rs = statement.executeQuery();
  339. rs.next(); // TODO
  340. return getOpsCode(rs);
  341. }
  342. private static OpsCode getOpsCode(ResultSet rs) throws SQLException {
  343. String code = rs.getString("opscode");
  344. String text = rs.getString("text");
  345. int version = rs.getInt("version");
  346. return new OpsCode(code, text, version);
  347. }
  348. public static List<Mitarbeiter> getAllMitarbeiter() throws SQLException {
  349. Statement statement = MySqlConnFactory.getConnection().createStatement();
  350. ResultSet rs = statement.executeQuery(SELECT_ALL_MITARBEITER);
  351. List<Mitarbeiter> mitarbeiters = new ArrayList<>();
  352. while (rs.next()) {
  353. mitarbeiters.add(getMitarbeiter(rs));
  354. }
  355. return mitarbeiters;
  356. }
  357. private static Mitarbeiter getMitarbeiter(int id) throws SQLException {
  358. PreparedStatement statement = MySqlConnFactory.getConnection().prepareStatement(SELECT_MITARBEITER_BY_ID);
  359. ResultSet rs;
  360. statement.setInt(1, id);
  361. rs = statement.executeQuery();
  362. rs.next(); // TODO
  363. return getMitarbeiter(rs);
  364. }
  365. private static Mitarbeiter getMitarbeiter(ResultSet rs) throws SQLException {
  366. Mitarbeiter mitarbeiter = new Mitarbeiter(rs.getInt("mitarbid"));
  367. mitarbeiter.setTitel(rs.getString("titel"));
  368. mitarbeiter.setVorname(rs.getString("vorname"));
  369. mitarbeiter.setNachname(rs.getString("nachname"));
  370. mitarbeiter.setEinweisenderArzt(rs.getString("einweisenderarzt"));
  371. return mitarbeiter;
  372. }
  373. public static List<Untersuchung> getUntersuchungByFall(Fall fall) throws SQLException {
  374. PreparedStatement statement = MySqlConnFactory.getConnection().prepareStatement(SELECT_UNTERS_BY_FALLID);
  375. statement.setInt(1, fall.getFallID());
  376. ResultSet rs = statement.executeQuery();
  377. List<Untersuchung> untersuchungen = new ArrayList<>();
  378. while (rs.next()) {
  379. untersuchungen.add(getUntersuchung(rs, fall));
  380. }
  381. return untersuchungen;
  382. }
  383. private static Untersuchung getUntersuchung(ResultSet rs, Fall fall) throws SQLException {
  384. Untersuchung untersuchung = new Untersuchung();
  385. untersuchung.setUntersID(rs.getInt("untersid"));
  386. untersuchung.setFall(fall);
  387. untersuchung.setDurchfuehrenderArzt(getMitarbeiter(rs.getInt("durchfuehrenderarzt")));
  388. untersuchung.setUntersuchungsdatum(rs.getTimestamp("untersuchungsdatum").toLocalDateTime());
  389. untersuchung.setOpscode(getOpsCode(rs.getString("opscode"), rs.getInt("opsversion")));
  390. setVersionInformation(untersuchung, rs);
  391. return untersuchung;
  392. }
  393. public static List<Diagnose> getDiagnosenByFall(Fall fall) throws SQLException {
  394. PreparedStatement statement = MySqlConnFactory.getConnection().prepareStatement(SELECT_DIAGNOSE_BY_FALLID);
  395. statement.setInt(1, fall.getFallID());
  396. ResultSet rs = statement.executeQuery();
  397. List<Diagnose> diagnosen = new ArrayList<>();
  398. while (rs.next()) {
  399. diagnosen.add(getDiagnose(rs.getInt("diagid"), fall));
  400. }
  401. return diagnosen;
  402. }
  403. public static List<Kasse> getAllKassen() throws SQLException {
  404. Statement statement = MySqlConnFactory.getConnection().createStatement();
  405. ResultSet rs = statement.executeQuery(SELECT_ALL_KASSEN);
  406. List<Kasse> kassen = new ArrayList<>();
  407. while (rs.next()) {
  408. kassen.add(getKasse(rs));
  409. }
  410. return kassen;
  411. }
  412. private static Kasse getKasse(ResultSet rs) throws SQLException {
  413. Kasse kasse = new Kasse();
  414. kasse.setKassenID(rs.getInt("kassenid"));
  415. kasse.setName(rs.getString("name"));
  416. kasse.setAdresse(rs.getString("adresse"));
  417. kasse.setPrivat(rs.getBoolean("privat"));
  418. setVersionInformation(kasse, rs);
  419. return kasse;
  420. }
  421. }