Allgemeiner Ansatz für die SQL-Skriptausführung in Java

9

Die in dieser Frage besprochene Funktionalität besteht darin, das angegebene SQL-Skript auszuführen. Der Inhalt des Skripts soll vom Benutzer während der Anwendungslaufzeit definiert werden. Das Skript kann sein, ob eine INSERT -Anweisung oder eine Sequenz komplexer PL/SQL -Anweisungen. Da die zur Laufzeit verfügbare Eingabe (eventuell als String-Instanz) über Java ausgeführt werden sollte.

Der aktuelle Ansatz umschließt die Benutzereingabe mit PreparedStatement und führt sie aus. Diese Lösung funktioniert für die vorhandenen Testfälle. Das Hauptanliegen besteht darin, die volle Funktionalität der verwendeten Datenbank bereitzustellen, die möglicherweise nicht durch Tests abgedeckt ist, d. H. Eine Lösung, die der Übergabe des gleichen Benutzer-SQL-Skripts an die vom Datenbankanbieter bereitgestellte Konsole am nächsten kommt.

Ich frage mich, ob es irgendwelche Einschränkungen im derzeitigen Ansatz mit PreparedStatement gibt? Gibt es einen besseren allgemeinen Ansatz für die Ausführung von SQL-Skripten über Java?

    
Pavel Ryzhov 22.01.2016, 09:29
quelle

2 Antworten

4

Nun, das ist eine breite Designfrage, aber ich denke, dass es mehrere Schritte gibt, die getan werden könnten:

  • Analyse und Erkennung von SQL-Skripten : Sie müssen in der Lage sein zu erkennen, welche Art von SQL-Skript Sie haben: PL / SQL, DML, DDL, CDL, TCL, mehrteilig getrennt durch ";" usw.
  • Statement-Erstellung : Für jede Art von SQL-Script müssen Sie die Anweisung mit Java ausführen können.
  • Analysieren des Ergebnisses Sie müssen in der Lage sein, die in SELECTs zurückgegebenen und optional von Funktionen zurückgegebenen Parameter oder die Anzahl betroffener / eingefügter Zeilen zu sammeln.
  • Fehlerbehandlung : Sie müssen in der Lage sein zu berichten, was mit dem SQL-Skript passiert ist, wenn die Dinge nicht wie erwartet funktionierten.

Bitte beachten Sie:

  • Dies scheint die Programmierung eines SQL-Clients zu sein. Wenn nicht, bitte erklären Sie, was Sie tun möchten. Verwenden Sie dies nicht als Verbindungsebene in einer normalen Anwendung. Es wird extrem ineffizient und anfällig für SQL-Injektionen sein (Es ist viel komplizierter als nur Kommas)
  • Sie können Funktionen aufrufen, um Abfragen mit externen Parametern auszuführen.
  • Dies beinhaltet nicht die Benutzerschnittstellen-Funktionen wie Syntax-Hervorhebung. Parameter Schnittstellen, etc ...
borjab 26.01.2016 13:22
quelle
0

Die erste Einschränkung von PreparedStatement , die Ihnen einfällt - Sie können keine OUT -Parameter einer gespeicherten Prozedur registrieren. Vielleicht möchten Sie in CallableStatement interface nachsehen.

    
LiLiput 31.01.2016 20:01
quelle