java jdbc connection tutorial with programming example
In diesem Lernprogramm für JDBC-Verbindungen werden grundlegende Schritte zu einer Datenbank anhand von Beispielen erläutert und JDBC-Verbindungszeichenfolgen für verschiedene Datenbanken bereitgestellt:
Fragen zum Interview mit Softwaretests für erfahrene
Im vorherigen Tutorial der JDBC-Tutorialserie In Java Database Connectivity (JDBC) haben wir Komponenten, Architektur und Treiberarten kennengelernt.
In diesem Lernprogramm werden die Schritte zum Herstellen einer Verbindung mit Datenbanken mithilfe von JDBC erläutert. Dieses Tutorial zeigt Ihnen, wie Sie eine JDBC-Verbindung herstellen und Datenbankoperationen ausführen. Die JDBC-API fungiert als Schnittstelle zwischen dem Java-Programm und der Datenbank.
Am Ende dieses Tutorials können Sie Java-Programme schreiben, um eine Verbindung zu Datenbanken herzustellen und DB-Vorgänge auszuführen.
Was du lernen wirst:
JDBC-Verbindungsschritte
Es gibt 6 grundlegende Schritte, um eine Verbindung mit JDBC herzustellen. Sie sind im folgenden Bild eingetragen:
# 1) Pakete importieren
Zuerst müssen wir die vorhandenen Pakete importieren, um sie in unserem Java-Programm zu verwenden. Durch den Import wird sichergestellt, dass JDBC-API-Klassen für das Programm verfügbar sind. Wir können dann die Klassen und Unterklassen der Pakete verwenden.
Fügen Sie unabhängig vom JDBC-Treiber die folgende Importanweisung in das Java-Programm ein.
import java.sql.*;
Importieren Sie die anderen Klassen basierend auf der Funktionalität, die Sie im Programm verwenden werden. Laden Sie die entsprechenden Jar-Dateien für die Datenbank herunter, die Sie im Programm verwenden werden.
Siehe die vorheriges Tutorial für die Links zum Herunterladen der Jar-Dateien für Ihre Datenbank.
JDBC API 4.0 bietet hauptsächlich zwei wichtige Pakete:
- java.sql
- javax.sql
(i) java.sql-Paket
Dieses Paket enthält Klassen und Schnittstellen, mit denen die meisten JDBC-Funktionen wie das Erstellen und Ausführen von SQL-Abfragen ausgeführt werden können.
Klassen / Schnittstellen | Beschreibung |
---|---|
DriverManager | Es bietet einen Basisdienst zum Verwalten einer Reihe von JDBC-Treibern |
KLECKS | Es repräsentiert den SQL Blob-Wert im Java-Programm |
CallableStatement | Es wird verwendet, um gespeicherte SQL-Prozeduren auszuführen |
CLOB | Es repräsentiert den SQL Clob-Wert im Java-Programm |
Verbindung | Es wird eine Verbindung (Sitzung) mit einer bestimmten Datenbank erstellt |
Datum | Es bietet Unterstützung für den Datums-SQL-Typ |
Treiber | Mit Driver Manager wird eine Instanz eines Treibers erstellt |
ParameterMetaData | Es ist ein Objekt, mit dem Informationen zu den Typen und Eigenschaften der einzelnen Parameter in einem PreparedStatement-Objekt abgerufen werden können |
PreparedStatement | Es wird verwendet, um eine parametrisierte Abfrage im Java-Programm zu erstellen und auszuführen |
ResultSet | Es wird verwendet, um zeilenweise auf das Ergebnis zuzugreifen |
ResultSetMetaData | Es wird verwendet, um Informationen zu den Typen und Eigenschaften der Spalten in einem ResultSet-Objekt abzurufen |
RowId | Es repräsentiert den SQL ROWID-Wert |
Speicherpunkt | Es repräsentiert den Sicherungspunkt in der Transaktion |
SQLData | Es wird verwendet, um den SQL User Defined Type (UDT) einer Klasse im Java-Programm zuzuordnen |
SQLXML | Es repräsentiert den SQL XML-Typ |
Erklärung | Es wird verwendet, um eine statische SQL-Anweisung auszuführen |
DriverPropertyInfo | Es bietet Treibereigenschaften zum Herstellen einer Verbindung |
SQLException | Es enthält Informationen zu Datenbankfehlern |
SQLTimeoutException | Es ist eine Unterklasse von SQLException, die ausgelöst wird, wenn das in der Anweisung angegebene Zeitlimit abgelaufen ist |
SQLWarning | Es ist eine Ausnahme, die Informationen zu Datenbankzugriffswarnungen enthält |
Struct | Es ist eine Standardzuordnung in einem Java-Programm für einen strukturierten SQL-Typ |
(ii) javax.sql-Paket
Es ist eine JDBC-Erweiterungs-API und bietet serverseitigen Datenzugriff und -verarbeitung in Java Program.
Klassen / Schnittstellen | Beschreibung |
---|---|
ConnectionEvent | Es enthält Informationen zum Auftreten verbindungsbezogener Ereignisse |
CommonDataSource | Es ist eine Schnittstelle, die die Methoden definiert, die DataSource, XADataSource und ConnectionPoolDataSource gemeinsam haben |
ConnectionPoolDataSource | Es ist eine Factory für PooledConnection-Objekte |
Datenquelle | Es ist eine Factory für Verbindungen zur physischen DataSource, die das Objekt darstellt |
PooledConnection | Es wird zum Verwalten des Verbindungspools verwendet |
RowSet | Es bietet Unterstützung für das JDBC-API für Java-Beans-Komponentenmodell |
RowSetMetadata | Es enthält die Informationen zu den Spalten in einem RowSet-Objekt |
ConnectionEventListener | Es wird verwendet, um PooledConnection-Objektereignisse zu registrieren |
RowSetEvent | Es wird generiert, wenn ein Ereignis für ein Rowset-Objekt auftritt |
StatementEvent | Es wird an alle StatementEventListener gesendet, die mit einer generierten PooledConnection registriert wurden |
# 2) Treiber laden
Zuerst sollten wir den Treiber im Programm laden / registrieren, bevor wir eine Verbindung zur Datenbank herstellen. Sie müssen es nur einmal pro Datenbank im Programm registrieren.
Wir können den Treiber auf zwei Arten laden:
- Class.forName ()
- DriverManager.registerDriver ()
(i) Class.forName ()
Auf diese Weise wird die Klassendatei des Treibers zur Laufzeit in den Speicher geladen. Es lädt implizit den Treiber. Während des Ladens registriert sich der Treiber automatisch bei JDBC.
DB-Name | JDBC-Treibername |
---|---|
Sybase | com.sybase.jdbcSybDriver |
MySQL | com.mysql.jdbc.Driver |
Orakel | oracle.jdbc.driver.OracleDriver |
Microsoft SQL Server | com.microsoft.sqlserver.jdbc.SQLServerDriver |
MS Access | net.ucanaccess.jdbc.UcanaccessDriver |
PostgreSQL | org.postgresql.Driver |
IBM DB2 | com.ibm.db2.jdbc.net.DB2Driver |
TeraData | com.teradata.jdbc.TeraDriver |
Hinweis: Die forName () -Methode ist nur für JDK-kompatible virtuelle Maschinen gültig.
(ii) DriverManager.registerDriver ()
DriverManager ist eine integrierte Klasse, die im Paket java.sql verfügbar ist. Es fungiert als Vermittler zwischen der Java-Anwendung und der Datenbank, die Sie verbinden möchten. Bevor Sie eine Verbindung mit der Datenbank herstellen, müssen Sie den Treiber bei DriverManager registrieren. Die Hauptfunktion von DriverManager besteht darin, die Treiberklasse der Datenbank zu laden und eine Verbindung mit der Datenbank herzustellen.
Public static void registerDriver (Treiber) - Diese Methode registriert den Treiber beim Treibermanager. Wenn der Fahrer bereits registriert ist, werden keine Maßnahmen ergriffen.
- Es wird werfen SQLException wenn der Datenbankfehler auftritt.
- Es wird werfen NullPointerException wenn der Treiber null ist.
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()) DriverManager.registerDriver(new com.microsoft.sqlserver.jdbc.SQLServerDriver())
Auf diese Weise können Sie den Treiber für Ihre Datenbank registrieren, indem Sie ihn als Parameter übergeben.
# 3) Verbindung herstellen
Nach dem Laden des Treibers besteht der nächste Schritt darin, die Verbindung herzustellen und herzustellen. Sobald dies erforderlich ist, werden Pakete importiert und Treiber geladen und registriert. Anschließend können wir eine Datenbankverbindung herstellen.
Die DriverManager-Klasse verfügt über die Methode getConnection. Mit dieser Methode stellen wir die Verbindung zur Datenbank her. Um die Methode getConnection () aufzurufen, müssen 3 Parameter übergeben werden. Die 3 Parameter sind URL des String-Datentyps, ein Benutzername und ein Kennwort für den Zugriff auf die Datenbank.
Die Methode getConnection () ist eine überladene Methode. Die 2 Methoden sind:
- getConnection (URL, Benutzername, Passwort); - Es hat 3 Parameter URL, Benutzername, Passwort.
- getConnection (URL); - Es hat nur einen Parameter. Die URL hat auch einen Benutzernamen und ein Passwort.
In der folgenden Tabelle sind die JDBC-Verbindungszeichenfolgen für die verschiedenen Datenbanken aufgeführt:
Datenbank | Verbindungszeichenfolge / DB-URL |
---|---|
Sybase | jdbc: Sybase: Tds: HOSTNAME: PORT / DATABASE_NAME |
MySQL | jdbc: mysql: // HOST_NAME: PORT / DATABASE_NAME |
Orakel | jdbc: oracle: thin: @HOST_NAME: PORT: SERVICE_NAME |
Microsoft SQL Server | jdbc: sqlserver: // HOST_NAME: PORT; DatabaseName = |
MS Access | jdbc: ucanaccess: // DATABASE_PATH |
PostgreSQL | jdbc: postgresql: // HOST_NAME: PORT / DATABASE_NAME |
IBM DB2 | jdbc: db2: // HOSTNAME: PORT / DATABASE_NAME |
TeraData | jdbc: teradata: // HOSTNAME / database =, tmode = ANSI, Zeichensatz = UTF8 |
Beispiel:
Connection con = DriverManager.getConnection(jdbc:oracle:thin:@localhost:1521:xe,System,Pass123@)
Hier in diesem Beispiel
- dünn bezieht sich auf den Treibertyp.
- localhost Hier wird die Oracle-Datenbank ausgeführt.
- 1521 ist die Portnummer für die Verbindung zur Datenbank.
- Fahrzeug - SID
- System - Benutzername für die Verbindung zur Oracle-Datenbank.
- Pass123 @ - Passwort
# 4) Anweisung erstellen und ausführen
Sobald die Verbindung hergestellt ist, können wir mit der verbundenen Datenbank interagieren. Zuerst müssen wir die Anweisung erstellen, um die SQL-Abfrage auszuführen, und dann die Anweisung ausführen.
(i) Erklärung erstellen
Jetzt erstellen wir das Anweisungsobjekt, das die Abfrage mit der verbundenen Datenbank ausführt. Wir verwenden die createStatement-Methode der Verbindung Klasse, um die Abfrage zu erstellen.
Im Paket java.sql stehen 3 Anweisungsschnittstellen zur Verfügung. Diese werden unten erklärt:
ein Statement
Diese Schnittstelle wird verwendet, um einfache SQL-Anweisungen ohne Parameter zu implementieren. Es gibt das ResultSet-Objekt zurück.
Statement statemnt1 = conn.createStatement();
b) Vorbereitete Erklärung
Diese PreparedStatement-Schnittstelle erweitert die Statement-Schnittstelle. Es hat also mehr Funktionen als die Anweisungsoberfläche. Es wird verwendet, um parametrisierte und vorkompilierte SQL-Anweisungen zu implementieren. Die Leistung der Anwendung erhöht sich, da die Abfrage nur einmal kompiliert wird.
Es ist einfach, diese Schnittstelle mit einem neuen Parameter wiederzuverwenden. Es unterstützt den Parameter IN. Auch wir können diese Anweisung ohne Parameter verwenden.
String select_query = “Select * from states where state_id = 1”; PreparedStatement prpstmt = conn.prepareStatement(select_query);
c) CallableStatement
Die CallableStatement-Schnittstelle erweitert die PreparedStatement-Schnittstelle. Es verfügt also über mehr Funktionen als die PreparedStatement-Oberfläche. Es wird verwendet, um eine parametrisierte SQL-Anweisung zu implementieren, die eine Prozedur oder Funktion in der Datenbank aufruft. Eine gespeicherte Prozedur funktioniert wie eine Methode oder Funktion in einer Klasse. Es unterstützt die Parameter IN und OUT.
Die CallableStatement-Instanz wird durch Aufrufen der prepareCall-Methode des Connection-Objekts erstellt.
CallableStatementcallStmt = con.prepareCall('{call procedures(?,?)}');
(ii) Führen Sie die Abfrage aus
Es gibt 4 wichtige Methoden, um die Abfrage in der Anweisungsschnittstelle auszuführen. Diese werden unten erklärt:
- ResultSet executeQuery (String sql)
- int executeUpdate (String sql)
- boolean execute (String sql)
- int () executeBatch ()
a) ResultSet executeQuery (String sql)
Die Methode executeQuery () in der Anweisungsschnittstelle wird verwendet, um die SQL-Abfrage auszuführen und die Werte aus der Datenbank abzurufen. Es gibt das ResultSet-Objekt zurück. Normalerweise verwenden wir diese Methode für die SELECT-Abfrage.
b) executeUpdate (String sql)
Die Methode executeUpdate () wird verwendet, um wertspezifische Abfragen wie INSERT-, UPDATE-, DELETE- (DML-Anweisungen) oder DDL-Anweisungen auszuführen, die nichts zurückgeben. Meistens verwenden wir diese Methode zum Einfügen und Aktualisieren.
c) Ausführen (String sql)
Die execute () -Methode wird zum Ausführen der SQL-Abfrage verwendet. Es kehrt zurück wahr wenn es die SELECT-Abfrage ausführt. Und es kehrt zurück falsch wenn es die INSERT- oder UPDATE-Abfrage ausführt.
d) executeBatch ()
Diese Methode wird verwendet, um einen Stapel von SQL-Abfragen an die Datenbank auszuführen. Wenn alle Abfragen erfolgreich ausgeführt werden, wird ein Array von Aktualisierungszählern zurückgegeben. Wir werden diese Methode verwenden, um den Großteil der Datensätze einzufügen / zu aktualisieren.
# 5) Ergebnisse abrufen
Wenn wir die Abfragen mit der Methode executeQuery () ausführen, wird das Ergebnis im ResultSet-Objekt gespeichert. Das zurückgegebene ResultSet-Objekt ist niemals null, selbst wenn die Tabelle keinen übereinstimmenden Datensatz enthält. Das ResultSet-Objekt wird verwendet, um auf die aus der Datenbank abgerufenen Daten zuzugreifen.
ResultSet rs 1= statemnt1.executeQuery(QUERY));
Wir können die executeQuery () -Methode für die SELECT-Abfrage verwenden. Wenn jemand versucht, die Einfüge- / Aktualisierungsabfrage auszuführen, wird SQLExecption mit der Meldung „ Die Methode executeQuery kann nicht für die Aktualisierung verwendet werden ”.
Ein ResultSet-Objekt zeigt auf die aktuelle Zeile im Resultset. Rufen Sie die next () -Methode in einer while-Schleife auf, um die Daten im ResultSet-Objekt zu iterieren. Wenn kein Datensatz mehr zu lesen ist, wird FALSE zurückgegeben.
ResultSet kann auch zum Aktualisieren von Daten in der Datenbank verwendet werden. Wir können die Daten von ResultSet mit Getter-Methoden wie getInt (), getString (), getDate () abrufen. Wir müssen den Spaltenindex oder den Spaltennamen als Parameter übergeben, um die Werte mit Getter-Methoden zu erhalten.
Wir werden im nächsten Tutorial mehr über das ResultSet erfahren.
# 6) Verbindung schließen
Schließlich sind wir mit der Bearbeitung der Daten in der Datenbank fertig. Jetzt können wir die JDBC-Verbindung schließen. Wir müssen sicherstellen, dass wir die Ressource geschlossen haben, nachdem wir sie verwendet haben. Wenn wir sie nicht richtig schließen, werden möglicherweise keine Verbindungen mehr hergestellt.
Wenn wir das Verbindungsobjekt schließen, werden die Statement- und ResultSet-Objekte automatisch geschlossen.
conn.close();
Ab Java 7 können wir die JDBC-Verbindungen mithilfe eines Try-Catch-Blocks automatisch schließen. Die JDBC-Verbindung sollte in der Klammer des try-Blocks geöffnet werden. Innerhalb des try-Blocks können Sie die Datenbankverbindungen wie gewohnt normal ausführen.
Sobald die Ausführung den try-Block verlässt, wird die Verbindung automatisch geschlossen. In diesem Fall müssen wir die Verbindung nicht durch Aufrufen der Methode conn.close im Java-Programm schließen.
try(Connection conn = DriverManager.getConnection(url, user, password)) { //database connection and operation }
Beispiel für eine Java JDBC-Verbindung
In diesem Beispiel erfahren Sie, wie Sie die 6 grundlegenden Schritte zum Herstellen einer Verbindung mit der Datenbank mithilfe von JDBC im Java-Programm implementieren.
Tabelle erstellen
Erstellen Sie zuvor zunächst eine Tabelle und fügen Sie einige Einträge hinzu.
Unten finden Sie die SQL-Abfrage zum Erstellen einer Tabelle.
create table employee_details (empNum number(10), lastName varchar(50), firstName varchar(50), email varchar(255) , deptNum number(10), salary number(10));
Erstellt die Tabelle 'employee_details' in Oracle DB.
kostenlose Alternative zu Quickbooks für kleine Unternehmen
Daten in Tabelle einfügen
Fügen Sie die Daten mithilfe der folgenden Abfragen in die Tabelle 'employee_details' ein.
insert into employee_details values (1001, 'Luther', 'Martin', 'ml@gmail.com', 1, 13000); insert into employee_details values (1002, 'Murray', 'Keith', 'km@gmail.com', 2, 25000); insert into employee_details values (1003, 'Branson', 'John', 'jb@gmail.com', 3, 15000); insert into employee_details values (1004, 'Martin', 'Richard', 'rm@gmail.com', 4, 16000); insert into employee_details values (1005, 'Hickman', 'David', 'dh@gmail.com', 5, 17000);
Java-Programm
Laden Sie die JDBC-JAR-Datei herunter und importieren Sie sie in das Java-Projekt.
package com.STH.JDBC; // import sql package to use it in our program import java.sql.*; public class Sample_JDBC_Program { public static void main(String() args) throws ClassNotFoundException, SQLException { // store the SQL statement in a string String QUERY = 'select * from employee_details'; //register the oracle driver with DriverManager Class.forName('oracle.jdbc.driver.OracleDriver'); //Here we have used Java 8 so opening the connection in try statement try(Connection conn = DriverManager.getConnection('jdbc:oracle:thin:system/pass123@localhost:1521:XE')) { Statement statemnt1 = conn.createStatement(); //Created statement and execute it ResultSet rs1 = statemnt1.executeQuery(QUERY); { //Get the values of the record using while loop while(rs1.next()) { int empNum = rs1.getInt('empNum'); String lastName = rs1.getString('lastName'); String firstName = rs1.getString('firstName'); String email = rs1.getString('email'); String deptNum = rs1.getString('deptNum'); String salary = rs1.getString('salary'); //store the values which are retrieved using ResultSet and print it System.out.println(empNum + ',' +lastName+ ',' +firstName+ ',' +email +','+deptNum +',' +salary); } } } catch (SQLException e) { //If exception occurs catch it and exit the program e.printStackTrace(); } } }
Ausgabe:
Wichtige Punkte zu beachten:
- Zuerst müssen wir die Pakete importieren, die wir in unserem Java-Programm für die JDBC-Verbindung verwenden werden. So können wir die Klassen, Unterklassen und Schnittstellen in den Paketen verwenden.
- Wir müssen den Treiber bei DriverManager registrieren oder laden, bevor wir eine Verbindung herstellen können.
- Nach der Registrierung des Treibers können wir die Verbindung herstellen und die Vorgänge ausführen.
- Über eine Anweisungsschnittstelle können wir die SQL-Abfrage erstellen und ausführen. Für eine einfache SQL-Abfrage können wir die Anweisungsschnittstelle verwenden. Zum Einfügen / Aktualisieren / Löschen können wir die PreparedStatement-Schnittstelle verwenden.
- Nach der Ausführung der Anweisung werden die Ergebnisse im ResultSet-Objekt gespeichert. Wir erhalten die Ergebnisse vom ResultSet-Objekt mit der next () -Methode für mehr als einen Datensatz.
- Sobald wir mit der Datenbankoperation fertig sind, müssen wir die Verbindung schließen. Damit die Ressource anderen zur Verfügung steht.
Häufig gestellte Fragen
F # 1) Was sind die grundlegenden Schritte, um eine Verbindung zur Datenbank in Java herzustellen?
Antworten: Es gibt 6 grundlegende Schritte, um eine Verbindung zur Datenbank in Java herzustellen.
Sie sind:
- Import-Paket
- Lasttreiber
- Verbindung herstellen
- Erstellen Sie die Anweisung und führen Sie sie aus
- Ergebnisse abrufen
- Verbindung schließen
F # 2) Was ist der Unterschied zwischen BLOB- und CLOB-Datentypen in JDBC?
Antworten:
KLECKS wird verwendet, um den binären Datentyp zu speichern. Die Speichergröße kann je nach Datenbank variieren Beispiel: Bilder, Sprache, Video.
CLOB wird verwendet, um den Zeichentyp von Daten zu speichern. Wie bei CLOB kann der Speicherplatz je nach Datenbank variieren. Beispiel: Dateien.
F # 3) Mit welcher Methode der DriverManager-Klasse wird eine Verbindung zur Datenbank hergestellt?
Antworten: Die DriverManager-Klasse verfügt über eine getConnection () -Methode, mit der eine Verbindung zur Datenbank hergestellt wird.
F # 4) Was ist der Unterschied zwischen Class.forName () und DriverManager.registerDriver ()?
Antworten: Class.forName () - - Zuerst wird der Treiber in den Speicher geladen und dann der entsprechende Treiber beim Treibermanager registriert. Anschließend wird ein Objekt des Treibers erstellt, um die JDBC-Verbindung herzustellen. Der Treiber wird explizit geladen.
DriverManager.registerDriver () - Es registriert den Treiber implizit.
F # 5) Was ist ein Verbindungsleck?
Antworten: Diese Situation tritt auf, wenn eine Verbindung geöffnet und Sie sie nicht geschlossen haben. Wenn es einen Codeblock gibt, der die Verbindung öffnet und die Verbindung nicht schließt. Immer wenn dieser Codeblock ausgeführt wird, tritt eine Verbindung aus dem Verbindungspool aus.
Sobald alle verfügbaren Verbindungen durchgesickert sind, ist keine Verbindung mehr verfügbar und die Anwendung bleibt hängen. Wie wichtig es ist, die Verbindung zu öffnen, ist es wichtig, die Verbindung zu schließen.
F # 6) Muss die Verbindung geschlossen werden?
Antworten: Wenn Sie Java-Versionen unter 7 verwenden, müssen Sie die Verbindung manuell schließen.
Ab Versionen über Java 7 können wir die Verbindung automatisch schließen, indem wir den JDBC-Verbindungscode in der Klammer des try-Blocks öffnen. Sobald das Programm den try-Block verlässt, wird die Verbindung automatisch geschlossen.
Fazit
In diesem Tutorial haben wir erläutert, wie Sie eine JDBC-Verbindung herstellen. Jetzt können Sie DB-Operationen mit JDBC im Java-Programm ausführen. Wir haben die 6 grundlegenden Schritte zum Herstellen einer Verbindung mit der Datenbank untersucht. Wir müssen die Pakete in unser Java-Programm importieren, um es verwenden zu können.
Sobald wir den Treiber registriert haben, können wir die Verbindung herstellen. Wir können die SQL-Anweisung über eine Anweisungsschnittstelle erstellen und ausführen und die Ergebnisse im ResultSet-Objekt abrufen. Als letzten Schritt sollten wir die Verbindung schließen.
Literatur-Empfehlungen
- Java JDBC Tutorial: Was ist JDBC (Java Database Connectivity)
- Java Interface und Abstract Class Tutorial mit Beispielen
- Java JDBC Transaction Management mit Beispiel
- JDBC DriverManager, JDBC PreparedStatement And Statement
- JDBC ResultSet: Verwendung von Java ResultSet zum Abrufen von Daten
- JAVA-Tutorial für Anfänger: Über 100 praktische Java-Video-Tutorials
- Einführung in die Java-Programmiersprache - Video-Tutorial
- Testen der Selendatenbank (mit WebDriver und JDBC-API)