Die Java Database Connectivity (JDBC) API ist eine Reihe von Schnittstellen, die Java-Programmierern den Zugriff auf Datenbanken ermöglichen. Die Schnittstellen verschiedener Entwickler sind nicht genau gleich. Nachdem ich JDBC von Oracle viele Jahre lang verwendet habe, habe ich viele Fähigkeiten gesammelt, die es uns ermöglichen können, die Leistung des Systems besser zu nutzen und mehr Funktionen zu erreichen.
1. Verwenden Sie Thin-Treiber in der Client-Softwareentwicklung
. In Bezug auf die Entwicklung von Java-Software bietet die Datenbank von Oracle vier Arten von Treibern, von denen zwei für Client-Software wie Anwendungssoftware, Applets und Servlets und die anderen beiden für verwendet werden Client-Software wie Anwendungssoftware, Applets und Servlets. Serverseitige Software wie gespeicherte Java-Prozeduren in Datenbanken. Bei der Entwicklung clientseitiger Software können wir zwischen OCI-Treiber und Thin-Treiber wählen. Der OCI-Treiber nutzt das Java Localization Interface (JNI), um über die Oracle-Client-Software mit der Datenbank zu kommunizieren. Der Thin-Treiber ist ein reiner Java-Treiber, der direkt mit der Datenbank kommuniziert. Für maximale Leistung empfiehlt Oracle die Verwendung von OCI-Treibern bei der Entwicklung von Client-Software, und das scheint auch richtig zu sein. Ich empfehle jedoch die Verwendung des Thin-Treibers, da durch viele Tests festgestellt wurde, dass die Leistung des Thin-Treibers unter normalen Umständen die des OCI-Treibers übertrifft.
2. Deaktivieren Sie die automatische Übermittlungsfunktion, um die Systemleistung zu verbessern.
Wenn Sie zum ersten Mal eine Verbindung mit der Datenbank herstellen, befindet sich die Verbindung standardmäßig im automatischen Übermittlungsmodus. Für eine bessere Leistung können Sie die Autocommit-Funktion deaktivieren, indem Sie die Methode setAutoCommit() der Connection-Klasse wie folgt mit einem booleschen False-Parameter aufrufen:
conn.setAutoCommit(false);
Es ist erwähnenswert, dass die Autocommit-Funktion deaktiviert ist , müssen wir die Transaktion manuell verwalten, indem wir die Methoden commit() und rollback() der Connection-Klasse aufrufen.
3. Verwenden Sie Statement-Objekte in dynamischen SQL- oder zeitbegrenzten Befehlen
. Bei der Ausführung von SQL-Befehlen haben wir zwei Möglichkeiten: Sie können PreparedStatement-Objekte oder Statement-Objekte verwenden. Unabhängig davon, wie oft Sie denselben SQL-Befehl verwenden, analysiert und kompiliert PreparedStatement ihn nur einmal. Bei Verwendung des Statement-Objekts wird jedes Mal, wenn ein SQL-Befehl ausgeführt wird, dieser analysiert und kompiliert. Das könnte Sie denken lassen, dass die Verwendung von PreparedStatement-Objekten schneller ist als die Verwendung von Statement-Objekten. Die von mir durchgeführten Tests haben jedoch gezeigt, dass dies bei Client-Software nicht der Fall ist. Daher sollten wir bei zeitlich begrenzten SQL-Operationen die Verwendung von Statement-Objekten in Betracht ziehen, es sei denn, SQL-Befehle werden in Stapeln verarbeitet.
Darüber hinaus erleichtert die Verwendung von Statement-Objekten auch das Schreiben dynamischer SQL-Befehle, da wir Zeichenfolgen verketten können, um einen gültigen SQL-Befehl zu erstellen. Daher glaube ich, dass das Statement-Objekt die Erstellung und Ausführung dynamischer SQL-Befehle erleichtern kann.
4. Verwenden Sie die Hilfsfunktion zum Formatieren dynamischer SQL-Befehle.
Beim Erstellen dynamischer SQL-Befehle, die mithilfe von Statement-Objekten ausgeführt werden, müssen wir uns mit einigen Formatierungsproblemen befassen. Wenn wir beispielsweise einen SQL-Befehl erstellen möchten, der den Namen O'Reilly in eine Tabelle einfügt, müssen wir das Zeichen „'“ in O'Reilly durch zwei aufeinanderfolgende Zeichen „''“ ersetzen. Der beste Weg, diese Aufgaben zu erfüllen, besteht darin, eine Hilfsmethode zu erstellen, die den Ersetzungsvorgang ausführt, und dann die erstellte Hilfsmethode zu verwenden, wenn die Verbindungszeichenfolge mithilfe einer Formel als SQL-Befehl ausgedrückt wird. Ebenso können wir die Hilfsmethode veranlassen, einen Datumswert zu akzeptieren und sie dann einen Zeichenfolgenausdruck basierend auf der to_date()-Funktion von Oracle ausgeben zu lassen.
5. Verwenden Sie PreparedStatement-Objekte, um die Gesamteffizienz der Datenbank zu verbessern.
Wenn Sie PreparedStatement-Objekte zum Ausführen von SQL-Befehlen verwenden, werden die Befehle von der Datenbank analysiert und kompiliert und dann im Befehlspuffer abgelegt. Wenn dann dasselbe PreparedStatement-Objekt ausgeführt wird, wird es erneut analysiert, aber nicht erneut kompiliert. Vorkompilierte Befehle befinden sich im Puffer und können wiederverwendet werden. In Unternehmensanwendungen mit einer großen Anzahl von Benutzern werden häufig dieselben SQL-Befehle wiederholt ausgeführt. Die Reduzierung der Anzahl der Kompilierungen durch die Verwendung von PreparedStatement-Objekten kann die Gesamtleistung der Datenbank verbessern. Sofern das Erstellen, Vorbereiten und Ausführen von PreparedStatement-Aufgaben auf der Clientseite nicht länger dauert als Statement-Aufgaben, würde ich in allen Fällen die Verwendung von PreparedStatement-Objekten empfehlen, mit Ausnahme dynamischer SQL-Befehle.
6. Verwenden Sie PreparedStatement-Objekte, um wiederholte Einfüge- oder Aktualisierungsvorgänge in Stapeln zu verarbeiten.
Wenn Sie Einfüge- und Aktualisierungsvorgänge in Stapeln verarbeiten, können Sie die dafür erforderliche Zeit erheblich reduzieren. Das von Oracle bereitgestellte Statement und CallableStatement unterstützen die Stapelverarbeitung nicht wirklich. Nur das PreparedStatement-Objekt unterstützt wirklich die Stapelverarbeitung. Wir können die Standard-JDBC-Stapelverarbeitung mit den Methoden addBatch() undexecuteBatch() wählen oder die schnellere proprietäre Oracle-Methode wählen, indem wir die setExecuteBatch()-Methode des PreparedStatement-Objekts und die StandardmethodeexecuteUpdate() verwenden.
Um
den proprietären Batch-
Mechanismus von Oracle zuverwenden
, können SiesetExecuteBatch
(
)
wie folgt aufrufen:
PreparedStatement pstmt3D null
;
() ist eine Obergrenze. Wenn dieser Wert erreicht ist, wird die Ausführung des SQL-Befehls automatisch ausgelöst und die Standardmethode „executeUpdate()“ wird als Batch-Prozess an die Datenbank gesendet. Wir können Batch-Aufgaben jederzeit übertragen, indem wir die Methode sendBatch() der Klasse PreparedStatement aufrufen.
7. Verwenden Sie die Oracle-Locator-Methode zum Einfügen und Aktualisieren großer Objekte (LOB). Die
PreparedStatement-Klasse von Oracle unterstützt die Verarbeitung großer Objekte wie BLOB und CLOB nicht vollständig. Insbesondere unterstützt der Thin-Treiber die Einstellung mit setObject() nicht. und setBinaryStream()-Methoden des PreparedStatement-Objekts. Der Wert von BLOB unterstützt nicht das Festlegen des Werts von CLOB mithilfe der setCharacterStream()-Methode. Nur Methoden im Locator selbst können LOB-Typwerte aus der Datenbank abrufen. Sie können PreparedStatement-Objekte zum Einfügen oder Aktualisieren von LOBs verwenden, Sie müssen jedoch einen Locator verwenden, um den Wert des LOBs abzurufen. Aufgrund dieser beiden Probleme empfehle ich die Verwendung der Locator-Methode zum Einfügen, Aktualisieren oder Abrufen von LOB-Werten.
8. Verwenden Sie die SQL92-Syntax zum Aufrufen gespeicherter Prozeduren
. Beim Aufruf gespeicherter Prozeduren können wir SQL92 oder Oracle PL/SQL verwenden. Die Verwendung von Oracle PL/SQL bringt Probleme mit sich Da es in der Zukunft Probleme geben wird, empfehle ich die Verwendung von SQL92 beim Aufruf gespeicherter Prozeduren.
9. Verwenden Sie Object SQL, um das Objektschema in die Datenbank zu übertragen.
Da die Datenbank von Oracle als objektorientierte Datenbank verwendet werden kann, können Sie erwägen, das objektorientierte Schema in der Anwendung in die Datenbank zu übertragen. Der aktuelle Ansatz besteht darin, Java-Beans als getarnte Datenbankobjekte zu erstellen, ihre Eigenschaften in relationalen Tabellen abzubilden und diesen Beans dann Methoden hinzuzufügen. Obwohl dies in Java kein Problem darstellt, da die Vorgänge außerhalb der Datenbank ausgeführt werden, kann andere Anwendungssoftware, die auf die Datenbank zugreift, das Objektmodell nicht nutzen. Wenn Sie die objektorientierte Technologie von Oracle nutzen, können Sie deren Daten und Vorgänge in der Datenbank simulieren, indem Sie einen neuen Datenbankobjekttyp erstellen und dann Tools wie JPublisher verwenden, um Ihre eigenen Java-Bean-Klassen zu generieren. Wenn Sie diese Methode verwenden, können nicht nur Java-Anwendungen das Objektmodell der Anwendungssoftware verwenden, sondern auch andere Anwendungssoftware, die die Daten und Vorgänge in Ihrer Anwendung gemeinsam nutzen muss, kann das Objektmodell der Anwendungssoftware verwenden.
10. Verwenden Sie SQL, um Vorgänge in der Datenbank abzuschließen.
Die wichtigste Erfahrung, die ich Ihnen vorstellen möchte, besteht darin, den satzorientierten Ansatz von SQL zur Lösung der Datenbankverarbeitungsanforderungen vollständig zu nutzen, anstatt prozedurale Programmiersprachen wie Java zu verwenden.
Wenn der Programmierer viele Zeilen in einer Tabelle nachschlagen würde, würde jede Zeile im Ergebnis nach Daten in anderen Tabellen suchen. Schließlich erstellte der Programmierer separate UPDATE-Befehle, um die Daten in der ersten Tabelle stapelweise zu aktualisieren. Eine ähnliche Aufgabe kann in einem UPDATE-Befehl ausgeführt werden, indem in der Set-Klausel eine mehrspaltige Unterabfrage verwendet wird. Warum Daten im Internet fließen lassen, wenn Sie die Aufgabe mit einem einzigen SQL-Befehl erledigen können? Ich empfehle Benutzern, sorgfältig zu lernen, wie sie die Leistungsfähigkeit von SQL maximieren können.
Autor: picva Quelle: CCID Technology Community