Zugriff in Java auf MySQL-Datenbanken. Daten abfragen, verändern, hinzufügen und löschen.
Den gesamten Beispielquelltext als Projekt gibt es auf Github.
Unsere Datenbank und Tabelle
Unsere Datenbank enthält eine einfache Tabelle, id, name und comment. Soweit so einfach.
Abhängigkeit mit Maven
Die notwendigen Abhängigkeiten für den Zugriff auf unsere MySQL-Datenbank können wir einfach mit Maven hinzufügen. Ggf. die Version auf die aktuelle Version anpassen.
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.28</version> </dependency>
Verbindung zur Datenbank, Verbindungsstring für MySQL
Nachdem das erledigt ist können wir die Verbindung zur Datenbank herstellen. Hierzu benötigen wir einen Verbindungsstring, Benutzer und Passwort.
public static Connection getConnection() throws SQLException { String databaseName = "java"; String user = "root"; String password = ""; String dbString = "jdbc:mysql://localhost:3306/" + databaseName; Connection conn = DriverManager.getConnection(dbString, user, password); return conn; }
Abfragen von Daten
Fangen wir mit dem Abfragen der Daten an. Wir erstellen in „PreparedStatement“ und führen die Abfrage durch. Dies gibt uns ein „ResultSet“ zurück. Mittels diesen können wir nun die Daten der Datenbank auslesen.
private static void readDataFromDatabase() { System.out.println("Daten abfragen"); System.out.println("--------------"); try { Connection conn = getConnection(); String sql = "SELECT * FROM example_table order by id DESC"; PreparedStatement statement = conn.prepareStatement(sql); ResultSet rs = statement.executeQuery(); while(rs.next()) { String line = Integer.toString(rs.getInt("id")); line += " - " + rs.getString("name"); line += " - " + rs.getString("comment"); System.out.println(line); } rs.close(); conn.close(); } catch (SQLException e) { throw new RuntimeException(e); } }
Bearbeiten von Daten
Das Bearbeiten sieht recht ähnlich aus. Allerdings führen wir unser „PreparedStatement“ etwas anders aus, als Update. Dies liefert uns auch gleich die Anzahl der Datensätze zurück, welche verändert worden sind.
public static void updateDataInDatabase(int id, String name) { System.out.println("Daten verändern"); System.out.println("---------------"); try { Connection conn = getConnection(); String sql = "UPDATE example_table SET name = ? WHERE ID = ?"; PreparedStatement statement = conn.prepareStatement(sql); statement.setString(1, name); statement.setInt(2, id); int affectedRows = statement.executeUpdate(); System.out.println("Update durchgeführt, veränderte Datensätze: " + affectedRows); conn.close(); } catch (SQLException e) { throw new RuntimeException(e); } }
Einfügen von Daten, neue ID ermitteln
Einfügen funktioniert analog. Auch hier bekommen wir die Anzahl der Datensätze zurück, außerdem ist es in den meisten Fällen hilfreich, die neue ID des Datensatzes zu erhalten. Dies können wir durch den Parameter „Statement.RETURN_GENERATED_KEYS“ erreichen, dieser erlaubt uns ein „ResultSet“ auszuwerten, welches die ID bw. IDs enthält.
public static void insertDataInDatabase(String name, String comment) { System.out.println("Daten einfügen"); System.out.println("---------------"); try { Connection conn = getConnection(); String sql = "INSERT INTO example_table (name, comment) VALUES (?,?)"; PreparedStatement statement = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS); statement.setString(1, name); statement.setString(2, comment); int affectedRows = statement.executeUpdate(); int newId = -1; ResultSet rs = statement.getGeneratedKeys(); if (rs.next()){ newId = rs.getInt(1); } System.out.println("Einfügen durchgeführt, eingefügte Datensätze: " + affectedRows + " - ID des Datensatzes: " + newId); rs.close(); conn.close(); } catch (SQLException e) { throw new RuntimeException(e); } }
Löschen von Datensätzen
Fehlt nur noch Löschen im Bunde. Dies entspricht im Wesentlichen dem Bearbeiten, auch hier bekommen wir die Anzahl der Datensätze zurück welche „bearbeitet“, also gelöscht wurden, zurück.
public static void deleteDataFromDatabase(int id) { System.out.println("Daten löschen"); System.out.println("---------------"); try { Connection conn = getConnection(); String sql = "DELETE FROM example_table WHERE ID = ?"; PreparedStatement statement = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS); statement.setInt(1, id); int affectedRows = statement.executeUpdate(); System.out.println("Anzahl Datensätze gelöscht: " + affectedRows); conn.close(); } catch (SQLException e) { throw new RuntimeException(e); } }