3-schichtige Informationssystem-Architektur • plattformunabhängig • beliebige Endgeräte • Client als Applikation bzw. als Applet • plattformunabhängig • objektorientierte Architektur Server: Anwendungslogik hier einfach Dateisystem des PCs jetzt: DB-Anschluss © FH AACHEN UNIVERSITY OF APPLIED SCIENCES strukturierte Daten OOS Prof. Dr. H. Faßbender DB-Anschluss 10. Juni 2016 | 1 Java-Abbild von DB-Inhalten <<class>> User Java User u = new User(); name: String email: String password: String u.setName(„Heinz Fassbender“) u.setEmail(„[email protected]“) u.setPassword(„geheim“) … Users DB name email password Heinz Fassbender [email protected] geheim … … … Pro Zeile: Ganze Tabelle: © FH AACHEN UNIVERSITY OF APPLIED SCIENCES 1 Objekt ResultSet der Objekte OOS Prof. Dr. H. Faßbender DB-Anschluss 10. Juni 2016 | 2 Ablauf einer SQL-Anfrage Anwendung DataSource getConnection() << create >> Connection Connection createStatement() << create >> Statement Statement executeQuery("SELECT name FROM users") << create >> ResultSet ResultSet next() true getString("username") username next() false © FH AACHEN UNIVERSITY OF APPLIED SCIENCES OOS Prof. Dr. H. Faßbender DB-Anschluss 10. Juni 2016 | 3 Absetzen von SQL-Statements allg. DataSource dataSource = … Connection connection; try { //siehe Folie 6 connection = dataSource.getConnection(); Statement statement = connection.createStatement(); ResultSet resultSet = statement.executeQuery(„SQL“); while(resultSet.next()) { /* ResultSet verarbeiten */ } } finally { if(connection != null) { connection.close(); } } © FH AACHEN UNIVERSITY OF APPLIED SCIENCES OOS Prof. Dr. H. Faßbender DB-Anschluss 10. Juni 2016 | 4 Absetzen von SQL-Statements speziell /* Namen aller gespeicherten Benutzer ermitteln */ String query = „SELECT name FROM users“; ResultSet resultSet = statement.executeQuery(query) users name email password Heinz Fassbender Heinz Fassbender fassbender geheim Till Dorschel Till Dorschel … geheimer resultSet (name) query List<String> names = new ArrayList<String>(); while(resultSet.next()) { String name = resultSet.getString(„name“); names.add(name); } names: „Heinz Fassbender“; „Till Dorschel“ © FH AACHEN UNIVERSITY OF APPLIED SCIENCES OOS Prof. Dr. H. Faßbender DB-Anschluss 10. Juni 2016 | 5 Erstellung einer DataSource • Datenquelle zentrale Schnittstelle für Connection-Handling • Konfig wichtig, da sonst Performance Engpass • Verwendung von „pooled“ DataSource • nicht für jede Anfrage neue DB-Verbindung • sondern Verwaltung eines Pools von DB-Verbindungen • hier folgende primitive Verbindung als DataSource durch "jdbcDriver" für die HSQL-Datenbank BasicDataSource dataSource = new BasicDataSource(); dataSource.setDriverClassName(jdbcDriver.class.getName()); dataSource.setUrl("jdbc:hsqldb:mem:TestSpeicherDB"); dataSource.setUsername("sa"); dataSource.setPassword(""); © FH AACHEN UNIVERSITY OF APPLIED SCIENCES OOS Prof. Dr. H. Faßbender DB-Anschluss 10. Juni 2016 | 6