SQL-Anweisungen in Anwendungen überschreiben, die integrierte Methoden verwenden

Wenn Sie integrierte Methoden in einer Anwendung verwenden, können Sie zur Ausführungszeit die SQL-Anweisungen in diesen Methoden durch ähnliche SQL-Anweisungen ersetzen.

Wenn Sie die Methode DataFactory.getData() zur Erstellung einer Implementierung der Schnittstelle Data aufrufen, können Sie ein Objekt java.util.Map<Object,Object> übergeben. Die Schlüssel in der Zuordnung sind SQL-Anweisungen, die Sie ersetzen wollen. Die Werte in der Zuordnung sind die SQL-Anweisungen, die Sie stattdessen verwenden wollen.

Wenn Sie Methoden im Objekt Data aufrufen, die einen Parameter String sql haben, versucht pureQuery, jede SQL-Anweisung, die Sie an diese Methoden übergeben, Schlüsseln im im Objekt Map zuzuordnen. Sobald eine Übereinstimmung für eine SQL-Anweisung vorliegt, die als Schlüssel verwendet wird, verwendet pureQuery die SQL-Anweisung, die als entsprechender Wert in der Zuordnung verwendet wird. Wenn keine Übereinstimmung vorliegt, führt pureQuery die ursprüngliche SQL-Anweisung aus.

Einschränkungen

SQL-Anweisungen, die an Methoden übergeben werden, müssen den SQL-Anweisungen genau entsprechen, die als Schlüssel verwendet werden. Wenn z. B. der Zeichenabstand oder die Groß-/Kleinschreibung differiert, werden zwei ansonsten identische SQL-Anweisungen nicht als gleich angesehen.

Ein SQL-Wert muss dem SQL-Schlüssel ähnlich genug sein, um ordnungsgemäß ausgeführt zu werden, wenn eine Methode Data aufgerufen wird. Eine Anweisung INSERT kann z. B. keine Anweisung SELECT ersetzen.

Ein SQL-Schlüssel und -Wert muss kompatible Eingaben und Ausgaben haben. Beispielsweise kann eine SQL-Anweisung SELECT, die Automobile-Objekte zurückgibt, keine Anweisung SELECT ersetzen, die die Eigenschaften von Airplane-Objekten zurückgibt.

Beispiele

Ein einfaches Beispiel ist das Ersetzen der in einem Produktionssystem verwendeten SQL-Anweisungen mit den in einem Testsystem überprüften. Allerdings kann das Überschreiben von SQL-Anweisungen auch in komplizierteren Situationen hilfreich sein.

Angenommen, Sie müssen SQL-Anweisungen ausführen, die verschiedene Datenvolumina manipulieren. Beispielweise könnten Sie Geschäftsberichte benötigen, die Daten nach Tag, Woche oder Quartal zusammenfassen. Oder Sie wollen die von Mitarbeitern ausgeführten Abfragen durch die Sicherheitsstufe der Mitarbeiter begrenzen. In solchen Situationen ist der Unterschied zwischen einer Ausführung der Anwendung und einer anderen durch Abweichungen in den ausgeführten SQL-Anweisungen bedingt.

Vor pureQuery beinhalteten Lösungen für diese Art von Problem Optionen wie folgende:

Diese Lösungen funktionieren tatsächlich. Allerdings ermöglicht pureQuery das Erstellen einer einzelnen Anwendung, mit der Sie auf eine Instanz des Objekts Map zugreifen können, die möglicherweise in eine Datei serialisiert wurde oder anderweitig für eine laufende Anwendung zugänglich ist. Die Auswahl des Objekts Map bestimmt die Funktionen der Anwendung.

Wenn Sie kein Objekt Map bereitstellen, kann Ihre Anwendung die grundlegenden, standardmäßigen Versionen der SQL-Anweisungen mit geringen Auswirkungen und hoher Sicherheit ausführen. Wenn Sie ein Objekt Map bereitstellen, kann es SQL-Anweisungen enthalten, die die entsprechenden Zugriffsstufen für den Benutzer bieten, der die Anwendung ausführt.


Feedback