api:documentation:database:start
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
api:documentation:database:start [2022/06/08 09:34] – [2. Daten aus der Datenbank lesen] Martin Pabst | api:documentation:database:start [2023/05/15 13:16] (aktuell) – [3. Daten in die Datenbank schreiben] Martin Pabst | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
====== Datenbankverbindung ====== | ====== Datenbankverbindung ====== | ||
<WRAP center round warning 80%> | <WRAP center round warning 80%> | ||
- | Legt man in der SQL-IDE eine Datenbank an, so kann man von Java-Programmen in der Online-IDE aus lesend und schreibend darauf zugreifen. Dies ist leider nicht von den Programmierkästen der Embedded-IDE aus möglich, daher lassen sich die Beispiele unten nicht direkt auf dieser Seite ausführen, sondern nur, wenn man sie in die Online-IDE kopiert und den Code "XYZ" durch einen korrekten Datenbankzugriffscode aus der SQL-IDE ersetzt. | + | Legt man in der SQL-IDE eine Datenbank an, so kann man von Java-Programmen in der Online-IDE aus lesend und schreibend darauf zugreifen. Dies ist leider nicht von den Programmierkästen der Embedded-IDE aus möglich, daher lassen sich die Beispiele unten nicht direkt auf dieser Seite ausführen, sondern nur, wenn man sie in die Online-IDE kopiert und den Code "1Ts8qXH77X" durch einen korrekten Datenbankzugriffscode aus der SQL-IDE ersetzt. |
</ | </ | ||
Zeile 17: | Zeile 17: | ||
<script type=" | <script type=" | ||
+ | // Dieses Beispiel lässt sich nur von der Online-IDE aus ausführen, nicht von www.learnj.de aus. | ||
+ | // Zuvor müssen Sie den Verbindungs-Code 1Ts8qXH77X durch den Ihrer eigenen Datenbank ersetzen. | ||
Connection c = DatabaseManager.getConnection(" | Connection c = DatabaseManager.getConnection(" | ||
Zeile 38: | Zeile 40: | ||
+ | <WRAP center round info 80%> | ||
+ | **Zum Vorgehen:** \\ | ||
+ | * Zunächst holt man sich mit '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * Das '' | ||
+ | * Die Methode " | ||
+ | * Mit den Methoden '' | ||
+ | </ | ||
+ | |||
+ | ===== 3. Daten in die Datenbank schreiben ===== | ||
+ | |||
+ | <WRAP center round info 80%> | ||
+ | Beim Schreiben geht man vor wie beim Lesen, nur dass jetzt die Methode '' | ||
+ | **Spezialfall: | ||
+ | Fügt man einer Tabelle mittels '' | ||
+ | </ | ||
+ | |||
+ | |||
+ | < | ||
+ | |||
+ | <div class=" | ||
+ | |||
+ | <script type=" | ||
+ | // Dieses Beispiel lässt sich nur von der Online-IDE aus ausführen, nicht von www.learnj.de aus. | ||
+ | // Zuvor müssen Sie den Verbindungs-Code 1Ts8qXH77X durch den Ihrer eigenen Datenbank ersetzen. | ||
+ | Connection c = DatabaseManager.getConnection(" | ||
+ | |||
+ | Statement st = c.createStatement(); | ||
+ | |||
+ | String statement = """ | ||
+ | | ||
+ | | ||
+ | | ||
+ | """; | ||
+ | |||
+ | st.executeUpdate(statement); | ||
+ | </ | ||
+ | |||
+ | </ | ||
+ | |||
+ | </ | ||
+ | |||
+ | ==== Schreibender Zugriff mit prepared statement: ==== | ||
+ | < | ||
+ | |||
+ | <div class=" | ||
+ | |||
+ | <script type=" | ||
+ | Connection c = DatabaseManager.getConnection(" | ||
+ | |||
+ | String statement = """ | ||
+ | update fluss set name = ? where FNR = ? | ||
+ | """; | ||
+ | |||
+ | PreparedStatement st = c.prepareStatement(statement); | ||
+ | String neuerName = " | ||
+ | String fnr = " | ||
+ | |||
+ | st.setString(1, | ||
+ | st.setString(2, | ||
+ | st.executeUpdate(); | ||
+ | |||
+ | </ | ||
+ | |||
+ | </ | ||
+ | |||
+ | </ | ||
+ | ===== 4. Prepared Statements ===== | ||
+ | |||
+ | <WRAP center round info 80%> | ||
+ | Kommen Teile einer SQL-Anweisung von einer Benutzereingabe, | ||
+ | <code java> | ||
+ | String name = Input.readString(" | ||
+ | String password = Input.readString(" | ||
+ | String statement = " | ||
+ | </ | ||
+ | so kann ein Benutzer mittels [[https:// | ||
+ | Dann wird aus dem Statement nämlich | ||
+ | <code sql> | ||
+ | select * from user where name = ' | ||
+ | </ | ||
+ | Da '' | ||
+ | Ein gutes Mittel, um dies zu verhindern, sind **Prepared Statements**. Die Idee besteht darin, vom Benutzer eingegebene Bestandteile nicht durch Aneinanderhängen von Zeichenketten in eine SQL-Anweisung einzubauen, sondern als Parameterwert mit an die Datenbank zu übergeben. Die Datenbank behandelt diese Parameter dann wie Zeichenketten Werte. Diese dürfen beliebige Zeichen enthalten und werden nie als SQL-Schlüsselwörter interpretiert, | ||
+ | Die Stellen, an denen in der SQL-Anweisung Parameterwerte eingefügt werden sollen, werden mit ''?'' | ||
+ | <code java> | ||
+ | String statement = """ | ||
+ | select name from fluss | ||
+ | where name like ? | ||
+ | """; | ||
+ | |||
+ | PreparedStatement st = c.prepareStatement(statement); | ||
+ | </ | ||
+ | |||
+ | Mittels '' | ||
+ | <code java> | ||
+ | st.setString(1, | ||
+ | </ | ||
+ | wird das erste ''?'' | ||
+ | <code java> | ||
+ | ResultSet rs = st.executeQuery(); | ||
+ | </ | ||
+ | an die Datenbank geschickt. Natürlich gibt es auch '' | ||
+ | </ | ||
+ | |||
+ | |||
+ | < | ||
+ | |||
+ | <div class=" | ||
+ | |||
+ | <script type=" | ||
+ | // Dieses Beispiel lässt sich nur von der Online-IDE aus ausführen, nicht von www.learnj.de aus. | ||
+ | // Zuvor müssen Sie den Verbindungs-Code 1Ts8qXH77X durch den Ihrer eigenen Datenbank ersetzen. | ||
+ | Connection c = DatabaseManager.getConnection(" | ||
+ | |||
+ | String statement = """ | ||
+ | select name from fluss | ||
+ | where name like ? | ||
+ | """; | ||
+ | |||
+ | PreparedStatement st = c.prepareStatement(statement); | ||
+ | |||
+ | String flussName = Input.readString(" | ||
+ | st.setString(1, | ||
+ | |||
+ | ResultSet rs = st.executeQuery(); | ||
+ | |||
+ | while(rs.next()) { | ||
+ | | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | </ | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | <WRAP center round tip 80%> | ||
+ | Möchte man von Java aus viele gleichartige Statements hintereinander an die Datenbank schicken, z.B. zum Verändern von Daten, so bringen Prepared Statements nicht nur einen Sicherheitsgewinn, | ||
+ | </ | ||
api/documentation/database/start.1654673652.txt.gz · Zuletzt geändert: 2022/06/08 09:34 von Martin Pabst