Temat składowanych procedur języka Java jest wciąż aktualny, więc w tym artykule kontynuujemy zagadnienia programistyczne, tym razem pod względem praktycznym. Jak ładować pliki? Co ma tym null w SQL-u do typów wbudowanych w Javę? Jak obejść brak typu bool (logicznego)? Te i inne wątpliwości rozwiewamy wraz z naszym specjalistą inżynierem.
Składowane procedury Java jak praktycznie do tego podejść?
Pisaliśmy dwa lata temu na temat składanych procedur Javy. Porównywaliśmy wtedy procedury tego języka z procedurami SQL jakie są zalety i wady tego rozwiązania programistycznego. Dzisiaj trochę praktyczne wskazówek dotyczących składowanych procedur w języku Java. Pierwsza część informatycznego blogu o Javie znajdziesz tu - Składowane procedury Java i Oracle
Jaki sposób ładowania plików?
Domyślnie uprzednio załadowane pliki Claas nie są ładowane jednakże opcja force umożliwia załadowanie takich uprzednio załadowanych plików class. Gdy plik źródłowy został załadowany, opcji force nie można użyć do ładowania odpowiadającego pliku klasy, gdyż najpierw należy usunąć obiekt źródłowy ze schematu.
Aby ustalić czy plik klasy jest też czy nie jest załadowany w danym schemacie, program load java zapytuję tabelę przemieszczania czyli po angielsku hash table, noszącą nazwę JAVA$CLASS$MD5$TABLE.
Można spotkać się z nazwą tej tabeli w języku angielskim digest.
Jak usunąć załadowaną klasę?
Gdy klasę ładujemy za pomocą polecenia loadjava, to logiczne byłoby usunięcie za pomocą polecenia dropjava. I tak właśnie na szczęście jest. Co będzie jeśli nie usuniemy klasy? Wtedy tabelę przemieszczania z angielska hash table, nie będzie poprawnie zaktualizowana.
Jak prawidłowo usuwać obiekty schematu Javy?
Należy losować tak samo jak zostały załadowane. Tak więc, gdy mamy plik. Class, to aby go usunąć używamy tej samej nazwy pliku.
Jaka jest specyfikacja wywołania?
Specyfikacja nie jest programem wrapper gdyż nie dodaje kolejnej warstwy kodu do wykonania - zamiast tego po prostu publikuje istnienie metody Javy.
Public czy static?
Publikować można jedynie publiczne metody statyczne poza jednym wyjątkiem.
Wyjątek stanowią publiczne metody instancji, które można publikować jako metody składowe typu obiekt SQL.
Czy specyfikację wywołania w pakiecie można przeciążać?
Najkrótsza odpowiedź brzmi tak. Chodzi o to że ta sama procedura lub funkcja może być definiowana więcej niż tylko raz za pomocą tej samej nazwy lecz z inną sygnaturą.
Co ciekawe, typy rodzime SQL mogą być mapowane bezpośrednio na rodzime typy Java. Należy jednak pochylić się na dwoma problemami. pierwszy z nich to potencjalna utrata informacji podczas mapowania z SQL na Java. Jako przykład możemy podać typ NUMBER. Przy mapowaniu go na jawowy typ short lub int możemy doświadczyć utraty informacji przy dużych liczbach.
Drugim problemem jest operowanie wartościami null. Widać różnicę między językami SQL i Java. W tym pierwszym dane mogą przyjmować wartości null. W javie nie mogą, więc jeśli parametry skalarnego typu Java otrzymają wartość tego typu, zgłasza się wyjątek NULL CONSTRAINT.
Jak mapować poprawnie tryby parametrów SQL na tryb parametrów Javy?
Przy mapowaniu wszystkie parametry Java i parametry specyfikacji wywołania muszą sobie odpowiadać parami za wyjątkiem metody main ().
Jak deklarować parametry logiczne?
Ponieważ nie da się zadeklarować parametrów logicznych dla procedury lub funkcji SQL, należy obejść tą niedogodność przesyłając typ number, podawszy jako prawdę (true) jedynkę, a wartość zerową jako fałsz (false).