Czy ktoś próbował utworzyć procedury przechowywane przy użyciu bazy danych H2?Jak utworzyć procedurę składowaną za pomocą bazy danych H2?
Odpowiedz
Aby uzyskać dostęp do bazy danych w ramach funkcji Java, potrzebne jest połączenie. W przypadku H2 istnieją dwa sposoby uzyskania takiego połączenia:
Rozwiązanie 1: Jeśli pierwszym parametrem funkcji Java jest java.sql.Connection
, baza danych zapewnia połączenie. W przypadku SQL jest to parametr "ukryty", co oznacza, że nie można i nie trzeba go ustawiać jawnie. Jest to udokumentowane: User-Defined Functions and Stored Procedures, "Funkcje wymagające połączenia". Przykład:
CREATE ALIAS QUERY AS $$
ResultSet query(Connection conn, String sql) throws SQLException {
return conn.createStatement().executeQuery(sql);
} $$;
CALL QUERY('SELECT * FROM DUAL');
Rozwiązanie 2: Dla zgodności z Apache Derby i Oracle, można otworzyć nowe połączenie wewnątrz funkcji Java z wykorzystaniem DriverManager.getConnection("jdbc:default:connection")
. Ta funkcja jest dostępna w wersji H2 1.3.151 i nowszej i jest domyślnie wyłączona. Aby go włączyć, dołącz ;DEFAULT_CONNECTION=TRUE
to the database URL. Jest to problematyczna, ponieważ sterownik Oracle JDBC spróbuje rozwiązać ten adres URL bazy danych, jeśli zostanie załadowany przed sterownikiem H2. Zasadniczo nie można używać tej funkcji, jeśli załadowany jest sterownik Oracle (uważam to za błąd w sterowniku Oracle).
zawsze zamykaj wyciągi, gdy skończysz z nimi ... Instrukcja s = conn.createStatement(); try {return s.executeQuery (sql);} finally {s.close();} – jcalfee314
Dla H2 (i to jest około H2) nie ma znaczenia, czy zamkniesz oświadczenie lub nie. Ale tak, generalnie oświadczenie powinno zostać zamknięte. –
@Thomas Mueller Twoje przykłady dokumentacji są tak słabe czy wstawisz przykłady CRUD – Dunken
- 1. Jak zaplanować procedurę składowaną?
- 2. Jak uruchomić procedurę składowaną za pomocą usługi Azure Automation?
- 3. Jak wykonać procedurę składowaną Oracle za pośrednictwem łącza do bazy danych
- 4. Uruchomienie bazy danych H2 w trybie serwera za pomocą sprężyny
- 5. Serwer SQL - czy można wykonać procedurę składowaną
- 6. Jak wywołać procedurę składowaną o niekonwencjonalnych parametrach?
- 7. Jak wywołać procedurę składowaną przez hibernację?
- 8. Jak automatycznie uruchamiać procedurę składowaną w harmonogramie?
- 9. Jak wywołać procedurę składowaną w widoku?
- 10. Plik źródłowej bazy danych Spring H2?
- 11. Jak programowo usunąć plik bazy danych H2?
- 12. Gdzie osadzone bazy danych H2 przechowują dane?
- 13. Zaszyfruj procedurę składowaną utworzoną przez SqlDependency
- 14. Zobacz procedurę składowaną/definicję funkcji w MySQL
- 15. Jak wywołać procedurę składowaną Oracle ze skryptu Excel VBA?
- 16. Jak wdrożyć zarządzaną procedurę składowaną bez użycia Visual Studio?
- 17. Zamykanie bazy danych H2; Compact vs Defrag?
- 18. Nie można przeglądać pliku bazy danych H2?
- 19. Wartość domyślna bazy danych H2 kolumny TIMESTAMP
- 20. Gdzie są moje pliki bazy danych H2?
- 21. Rezultaty bazy danych H2 w konsoli Eclipse
- 22. Sybase IQ - jak wyświetlić procedurę składowaną bez zawijania tekstu?
- 23. utwórz procedurę składowaną, jeśli nie istnieje w serwerze sql
- 24. Jak uzyskać dostęp do pliku * .mv.db bazy danych H2?
- 25. Eksport danych z bazy danych H2 do CSV
- 26. Uzyskiwanie dostępu do bazy danych projektu odtwarzania za pomocą przeglądarki h2
- 27. Jak utworzyć procedurę przechowywaną MySQL z PHP?
- 28. Wywoływanie bazy danych Neo4j za pomocą Django
- 29. Codeigniter za pomocą bazy danych dostępu ms
- 30. Czy można wykonać procedurę składowaną na zestawie bez użycia kursora?
Mój problem z używaniem funkcji Java różni się od [tej] (http://stackoverflow.com/questions/3098905/how-to-create-stored-procedure-using-h2-database). Nie wiem, jak uzyskać dostęp do tabel w takiej funkcji (tworzenie połączenia nie ma sensu, robi to)? – maaartinus
Zawsze pomaga przejrzeć podręcznik: [H2: Funkcje zdefiniowane przez użytkownika i przechowywane procedury] (http://www.h2database.com/html/features.html#user_defined_functions) – NullUserException