JDBC - API
This is a modal window.
The media could not be loaded, either because the server or network failed or because the format is not supported.
Formal Metadata
Title |
| |
Title of Series | ||
Number of Parts | 93 | |
Author | ||
License | CC Attribution 4.0 International: You are free to use, adapt and copy, distribute and transmit the work or content in adapted or unchanged form for any legal purpose as long as the work is attributed to the author in the manner specified by the author or licensor. | |
Identifiers | 10.5446/64806 (DOI) | |
Publisher | ||
Release Date | ||
Language |
Content Metadata
Subject Area | ||
Genre | ||
Abstract |
| |
Keywords |
Datenbanken62 / 93
3
16
19
20
28
32
39
40
41
49
52
54
58
62
66
70
74
81
83
86
00:00
APIJDBCSQLString (computer science)UpdateSet (mathematics)Computer scienceDatabaseString (computer science)Parameter (computer programming)Social classData typeVariable (mathematics)PasswordCommon-LISP object systemIP addressORACLSAttribute grammarTupleFactorizationMetadataDevice driverManual of StyleInstanz <Informatik>ZugriffQuery languageAutomatonOperating systemConnected spaceTotal S.A.NumberJava appletMathematicsComputer programmingResultantData managementImage registrationCASE <Informatik>Server (computing)Instance (computer science)Encapsulation (object-oriented programming)Address spaceObject (grammar)InformationBlock (periodic table)MereologyDifferent (Kate Ryan album)INTEGRALClosed setData structureSystem callLibrary (computing)InjektivitätSign (mathematics)Statement (computer science)Set (mathematics)Pattern languageChainException handlingWell-formed formulaDivisorEqualiser (mathematics)Pairwise comparisonOrder (biology)Loop (music)Operator (mathematics)2 (number)XMLComputer animationProgram flowchart
09:18
Computer scienceSQLClient (computing)DatabaseString (computer science)JDBCDatenkonvertierungAttribute grammarComputer animationProgram flowchart
09:31
SQLJDBCDatenkonvertierungString (computer science)MetadataAPISocial classDatabaseVideoconferencingJava appletStatement (computer science)Address spaceEncapsulation (object-oriented programming)Connected spaceResultantDevice driverComputer animationXML
Transcript: German(auto-generated)
00:07
In diesem Video gebe ich einen kurzen Überblick über die JDBC API. Der JDBC Treiber kann eine Verbindung, Connection genannt, mit der Datenbank aufbauen.
00:21
Über die Connection, also die Datenbankverbindung, können Statements an die Datenbank gesendet werden. Die Statements beinhalten die gekapselten SQL-Anweisungen. Die Datenbank liefert daraufhin das Result-Set zurück. Das beinhaltet die Ergebnismenge einer Anfrage oder die Anzahl der geänderten Topel.
00:46
Wie implementiert man nun, dass das auch passiert? Für all diese Aufgaben bietet die JDBC API entsprechende Klassen an. Diese sind in dem Package Java SQL zu finden. Die Klasse DriverManager dient zur Einbindung des JDBC Treibers.
01:04
Mit der Klasse Connection wird die Datenbankverbindung aufgebaut. Die Klassen Statement und Prepared Statement werden genutzt, um SQL-Anweisungen zu kapseln, die an die Datenbank geschickt werden. Die durch die Datenbank zugrückgelieferte Ergebnismenge zu einer Anfrage ist dann eine Instanz der Klasse Result-Set.
01:30
Schauen wir uns all diese Klassen einmal mit ihren Methoden an. Die Klasse DriverManager bietet Methoden an, um den JDBC Treiber zu registrieren und zu initialisieren.
01:42
Das Initialisieren des JDBC Treibers kann nicht automatisch stattfinden, weil die einzelnen Libraries eine herstellerspezifische Struktur aufweisen. Daher unterscheiden sich die Aufrufparameter für die Initialisierung von Treiber zu Treiber.
02:03
In diesem Beispiel sehen Sie die Einbindung des Oracle JDBC Treibers. Die Registrierung des JDBC Treibers erfolgt seit Java 6, in der Regel automatisch. Bei manchen Betriebssystemen kann es allerdings sein, dass diese Registrierung noch separat erfolgen muss.
02:25
Die Klasse Connection ist dafür verantwortlich, um die Verbindung mit der Datenbank herzustellen und diese auch hinterher wieder zu schließen. Daher bietet sie auch entsprechende Methoden an, auch um die SQL-Anweisungen zu kapseln und diese an das Datenbank-Management-System zu senden.
02:47
Dies gilt insbesondere auch für Abfragen des DataDictionaries der Datenbank. Denn auch eine Abfrage des DataDictionaries ist nichts anderes als eine SQL-Abfrage. Auch der Transaktionskontext kann über diese Klasse eingestellt werden.
03:03
Hierdurch kann der Datenbank mitgeteilt werden, ob es sich bei den SQL-Anweisungen um rein lesende Anfragen handelt. Zum Öffnen einer Verbindung muss ein Connection-Objekt instanziert werden. Die URL beinhaltet einmal die Information, welcher JDBC Treiber genutzt werden soll und die Adresse des Datenbank-Servers.
03:27
Die Adresse des Datenbank-Servers beinhaltet einmal die IP, den zugehörenden Port und das Schema oder im Fall von Oracle die SID. Ein Connection-Objekt wird instanziert durch den Aufruf der Methode GetConnection der Klasse DriverManager.
03:46
Dieser muss dann zusätzlich neben der URL auch noch die UserID und das Passwort für die Datenbank mitgegeben werden. Das Schließen der Verbindung erfolgt über die Methode Close.
04:01
Ab Java 7 gibt es auch die Möglichkeit, im Rahmen eines Try-Catch-Blockes diese Ressourcen zur Verfügung zu stellen. Hier sehen Sie einmal ein Beispiel. Im Try-Block wird das Connection-Objekt instanziert. Dieses wird wieder freigegeben am Ende des Catch-Blocks. Im Inneren des Try-Catch-Blocks können dann Statements definiert werden und Resultsets ausgewertet werden.
04:29
In einem Statement kann beispielsweise eine Update-Anweisung gekapselt werden. Ein Statement-Objekt wird über den Aufruf der Methode CreateStatement des Connection-Objekts erzeugt.
04:43
Dieses Statement-Objekt kann jetzt genutzt werden, um eine SQL-Anweisung an die Datenbank zu schicken. Dies erfolgt mit dem Befehl ExecuteUpdate für alle Befehle, die keine Ergebnismenge zurückliefern. Der auszuführende SQL-Befehl nimmt hierbei als Aufrufparameter.
05:06
Das wäre in diesem Fall ein Update-Befehl, der in der Variable SQLString als Zeichenkette hinterlegt ist. Mit der Methode ExecuteUpdate können nicht nur Update-Befehle, sondern auch Insert- und Delete-Befehle ausgeführt werden.
05:26
Die Verwendung der Klasse Statement hat den Nachteil, dass sie anfällig ist für SQL-Injections. Das liegt daran, dass sie den SQL-Befehl als reine Zeichenkette entgegen nimmt, ohne dass eine bestimmte Struktur dieser Zeichenkette vorgegeben wird.
05:45
Bei der Instanzierung eines PreparedStatements wird als Argument schon das Muster des SQL-Befehls mitgegeben. Dieses Muster wird dann direkt auch schon an die Datenbank geschickt, die dann schon eine Vorkomponierung durchführt.
06:05
Anschließend werden die Parameter belegt, die in dem Muster durch Fragezeichen gekennzeichnet sind. Die einzelnen Parameter werden in der Reihenfolge belegt, in der sie in dem Muster auftreten.
06:20
Also als erstes Fragezeichen taucht das Fragezeichen bei Nachname auf, also wird der Nachname als erster Parameter belegt. Das PreparedStatement wird dann ausgeführt mit ExecuteUpdate, wenn alle Parameter belegt worden sind. Bei der Nutzung des PreparedStatements ergibt sich ein Performance-Vorteil.
06:43
Im Vergleich zu einem normalen Statement ergab die Verwendung eines PreparedStatements in diesem Beispiel ein Performance-Vorteil um ein Faktor 3. Wenn Sie also in einer Java-Methode viele gleichartige SQL-Anweisungen ausführen wollen,
07:03
beispielsweise wenn Sie Formularinhalte persistieren, dann sollten Sie immer mit einem PreparedStatement arbeiten. Wenn Sie Anfragen an die Datenbank richten, dann brauchen Sie die Klasse ResultSet, die dann als Rückgabe zurückgegeben wird.
07:23
Die Anfrage selber wird über die Methode ExecuteQuery an die Datenbank geschickt und liefert dann das ResultSet zurück. Sie erhalten immer ein ResultSet bei einer Anfrage zurück, egal ob die Anfrage kein, ein oder viele Tupel zurückliefert.
07:46
Diese Ergebnismenge muss dann zeilenweise im Java-Programm ausgewertet werden. Typischerweise wird hierfür eine Wallschleife verwendet. Durch die Methode Next wird immer das nächste Tupel der Ergebnismenge bereitgestellt.
08:08
Mit dem ersten Next-Befehl erhalten wir damit das erste Tupel, mit dem nächsten Next-Befehl das zweite Tupel, mit dem nächsten Next-Befehl das dritte Tupel. Die Klasse ResultSet stellt Get-Methoden bereit, um auf die einzelnen Attribute eines Tupels zugreifen zu können.
08:27
Die Get-Methode ist dabei entsprechend dem Datentyp zu wählen, der als Rückgabe erwartet wird. Die einzelnen Attribute der Ergebnismenge sind dann auch entsprechend dem SQL-Statement durchnummeriert,
08:43
sodass der Zugriff auf das erste Attribut mit dem Parameter 1 erfolgt, das zweite Attribut mit dem Parameter 2 und das dritte Attribut mit dem Parameter 3. Anschließend können die ausgelesenden Daten im Java-Programm weiterverarbeitet werden.
09:03
Die Klasse ResultSet stellt auch Methoden bereit, um Metadaten zu den einzelnen Attributen auszulesen. Beispielsweise kann abgefragt werden, ob ein Attribut den Wert null annehmen darf oder nicht. Das wäre dann die Methode IsNullAble.
09:22
Ob ein Attribut Wert selber dann null ist, kann dann anschließend mit der Methode WasNull abgefragt werden. Natürlich gibt es noch viele weitere Methoden, die verfügbar sind. Hierfür können Sie am besten in der zugehörnen Java-Doc nachlesen.
09:42
So, in diesem Video ging es um die grundlegenden Klassen in dem Package java.sql. Dabei handelte es sich um die Klasse DriverManager zum Initialisieren des JDBC Drivers und die Klasse Connections zur Aufbau der Datenbankverbindung.
10:01
Die Klassen Statement und Prepared Statement werden genutzt, um SQL-Advisungen zu kapseln und diese an die Datenbank zu schicken. Die Datenbank liefert dann ein ResultSet zurück, welches die Ergebnisse der Anfrage beinhaltet.