Hat jemand versucht, gespeicherte Prozeduren mithilfe der H2-Datenbank zu erstellen?Wie erstellt man gespeicherte Prozedur mit H2-Datenbank?
Antwort
Um auf die Datenbank innerhalb einer Java-Funktion zuzugreifen, benötigen Sie eine Verbindung. Für H2, gibt es zwei Möglichkeiten, eine solche Verbindung zu erhalten:
Lösung 1: Wenn der erste Parameter der Java-Funktion ein java.sql.Connection
ist, dann ist die Datenbank, die die Verbindung bereitstellt. Für SQL ist dies ein "versteckter" Parameter, was bedeutet, dass Sie ihn nicht explizit festlegen müssen und müssen. Dies ist dokumentiert: User-Defined Functions and Stored Procedures, "Funktionen, die eine Verbindung erfordern". Beispiel:
CREATE ALIAS QUERY AS $$
ResultSet query(Connection conn, String sql) throws SQLException {
return conn.createStatement().executeQuery(sql);
} $$;
CALL QUERY('SELECT * FROM DUAL');
Lösung 2: Für die Kompatibilität mit Apache Derby und Oracle, Sie eine neue Verbindung innerhalb der Java-Funktion DriverManager.getConnection("jdbc:default:connection")
öffnen können. Diese Funktion ist in H2 Version 1.3.151 und neuer verfügbar und standardmäßig deaktiviert. Um es zu aktivieren, fügen Sie ;DEFAULT_CONNECTION=TRUE
to the database URL an. Dies ist ein problematisches Feature, da der Oracle JDBC-Treiber versucht, diese Datenbank-URL aufzulösen, wenn sie vor dem H2-Treiber geladen wird. Im Grunde können Sie die Funktion nicht verwenden, wenn der Oracle-Treiber geladen ist (ich betrachte dies als einen Fehler im Oracle-Treiber).
Schließen Sie immer Ihre Aussagen, wenn Sie damit fertig sind ... Statement s = conn.createStatement(); try {return s.executeQuery (sql);} finally {s.close();} – jcalfee314
Für H2 (und das ist ungefähr H2) ist es egal, ob Sie schließen die Aussage oder nicht. Aber ja, generell sollte die Aussage geschlossen sein. –
@Thomas Mueller Ihre Dokumentationsbeispiele sind so schlecht würden Sie eine CRUD Beispiele setzen – Dunken
- 1. Wie erstellt man eine gespeicherte Prozedur?
- 2. wie erstellt insert gespeicherte Prozedur mysql
- 3. Wie erstellt man eine gespeicherte MySQL-Prozedur aus PHP?
- 4. Wie erstellt CLR gespeicherte Prozedur mit Nvarchar (Max) Parameter?
- 5. Gespeicherte Prozedur mit Standardparametern
- 6. Aufruf gespeicherte Prozedur mit Linq
- 7. Gespeicherte Prozedur
- 8. Gespeicherte Prozedur mit CTE kann nicht erstellt werden
- 9. Wie verwendet man PL/SQL gespeicherte Prozedur mit Variable
- 10. Gespeicherte Prozedur in phpmyadmin
- 11. Gespeicherte MySQL-NDB-Prozedur
- 12. Wie eine gespeicherte Prozedur aufzurufen ado.net mit
- 13. Wie gespeicherte Prozedur mit neuem Namen kopieren?
- 14. Hilfe mit SQL Gespeicherte Prozedur
- 15. Sequentiell gespeicherte Prozedur mit Benutzereingabe
- 16. Wie kann man nur durch die gespeicherte Prozedur einfügen?
- 17. Gespeicherte Prozedur Ausführungszeit Problem
- 18. PDO Gespeicherte Prozedur Rückgabewert
- 19. Gespeicherte Prozedur mit einem Ausgabeparameter ausführen?
- 20. Gespeicherte Prozedur aufrufen VBA
- 21. Gespeicherte Prozedur Versionierung
- 22. Anrufdaten-spezifische gespeicherte Prozedur von Oracle-Prozedur
- 23. Gespeicherte MemSQL-Prozedur
- 24. Gespeicherte Prozedur, die eine andere gespeicherte Prozedur ausführt
- 25. in gespeicherte Prozedur
- 26. Mysql gespeicherte Prozedur Editor
- 27. PHPUnit und gespeicherte Prozedur
- 28. Temporär gespeicherte Prozedur Bereich
- 29. Gespeicherte Prozedur mit Ausgabe-/Eingabeparameter Rückgabewert
- 30. Verkettungs innerhalb gespeicherte Prozedur
Mein Problem mit Java-Funktionen unterscheidet sich von diesem [http://stackoverflow.com/questions/3098905/how-to-create-stored-procedure-using-h2-database]. Ich weiß nicht, wie man in einer solchen Funktion auf Tabellen zugreift (das Erstellen einer Verbindung macht dort keinen Sinn, oder?) – maaartinus
Es hilft immer, das Handbuch zu betrachten: [H2: Benutzerdefinierte Funktionen und gespeicherte Prozeduren] (http://www.h2database.com/html/features.html#user_defined_functions) – NullUserException