SQLJ - SQLJ
SQLJ je pracovní název pro snahy o kombinaci Jáva a SQL. Bylo to běžné úsilí zahájené kolem roku 1997 inženýry z IBM, Věštec, Compaq, Informix, Sybase, Cloudscape a Sun Microsystems.
Skládá se ze tří částí: 0, 1 a 2. Část 0 popisuje vkládání příkazů SQL do programů Java. SQLJ část 0 je základem pro část 10 SQL: 1999 standardní, aka Vazby jazyků objektů SQL (SQL / OLB).[1] Část 1 a 2 SQLJ popisuje obrácenou možnost používat třídy Java (rutiny a typy) z příkazů SQL. Části 1 a 2 jsou základem pro část 13 standardu SQL, Rutiny a typy SQL pomocí programovacího jazyka Java (SQL / JRT).
„SQLJ“ se běžně používá k označení právě SQLJ část 0, obvykle když je v kontrastu s jinými prostředky pro vkládání SQL do Javy, jako JDBC.
Normy ANSI a ISO
- SQLJ část 0: ANSI X3.135.10-1998, „Databázový jazyk SQL - Část 10: Vazby objektového jazyka (SQL / OLB)“
- SQLJ část 1: ANSI NCITS 331.1-1999, „SQLJ - Část 1: Rutiny SQL pomocí programovacího jazyka Java“
- SQLJ část 2: ANSI NCITS 331.2-2000, „SQLJ - část 2: Typy SQL používající programovací jazyk Java“
Část 0 byla aktualizována pro kompatibilitu s JDBC 2.0 a ratifikována ISO v roce 2000. Poslední dvě části byly při předložení ISO kombinovány. Část 2 byla v zásadě přepsána pro podání ISO, protože verze ANSI nebyla pro specifikaci dostatečně formální, protože se blížila stylu uživatelský manuál. Kombinovaná verze byla ratifikována v roce 2002.[1]
- ISO / IEC 9075-10: 2000, Informační technologie - Databázové jazyky - SQL - Část 10: Vazby jazyků objektů (SQL / OLB)
- ISO / IEC 9075-13: 2002, Informační technologie - Databázové jazyky - SQL - Část 13: Rutiny a typy SQL používající programovací jazyk Java (SQL / JRT).
SQLJ část 0
Specifikace SQLJ část 0 do značné míry pochází od společnosti Oracle, která také poskytla první referenční implementaci.[1]
V následujícím SQLJ je synonymum pro SQLJ část 0.
Zatímco JDBC poskytuje API, SQLJ se skládá z Jazyk rozšíření. Programy obsahující SQLJ tedy musí být spuštěny přes a preprocesor (překladač SQLJ), než je bude možné zkompilovat.
Výhody
Mezi výhody SQLJ oproti JDBC patří:
- Příkazy SQLJ bývají kratší než ekvivalentní programy JDBC.
- Syntaxi SQL lze zkontrolovat v době kompilace. Výsledky vrácených dotazů lze také přísně zkontrolovat.
- Preprocesor může generovat statický SQL, který funguje lépe než dynamický SQL, protože plán dotazů je vytvořen v době kompilace programu, uložen v databázi a znovu použit za běhu. Statický SQL může zaručit stabilitu přístupového plánu. IBM DB2 podporuje statické použití SQL v programech SQLJ.
Nevýhody
- SQLJ vyžaduje krok předzpracování.
- Mnoho IDE nemají podporu SQLJ.
- SQLJ postrádá podporu pro většinu běžných persistence frameworků, jako je Přezimovat.
- Oracle 18c (12.2) zrušil podporu SQLJ v databázi.
Příklady
Následující příklady porovnávají syntaxi SQLJ s využitím JDBC.
JDBC | SQLJ |
---|---|
Připravené prohlášení známka = spoj.připravit prohlášení( „VYBRAT PŘÍJMENÍ“ + „, FIRSTNME“ + „, PLATBA“ + „FROM DSN8710.EMP“ + „KDE MEZI PLATBOU? A?“);známka.setBigDecimal(1, min);známka.setBigDecimal(2, max);ResultSet rs = známka.executeQuery();zatímco (rs.další()) { příjmení = rs.getString(1); jméno = rs.getString(2); plat = rs.getBigDecimal(3); // Tisknout řádek ...}rs.zavřít();známka.zavřít(); | #sql soukromé statický iterátor EmployeeIterator(Tětiva, Tětiva, BigDecimal);...EmployeeIterator iter;#sql [ctx] iter = { VYBRAT PŘÍJMENÍ , PRVNÍ , PLATBA Z DSN8710.EMP KDE PLATBA MEZI :min A :max};dělat { #sql { VYNÉST :iter DO :příjmení, :jméno, :plat }; // Tisk řádek...} zatímco (!iter.endFetch());iter.zavřít(); |
JDBC | SQLJ |
---|---|
Připravené prohlášení známka = spoj.připravit prohlášení( „VYBERTE MAX (SALARY), AVG (SALARY)“ + „FROM DSN8710.EMP“);rs = známka.executeQuery();-li (!rs.další()) { // Chyba - nebyly nalezeny žádné řádky}maxSalary = rs.getBigDecimal(1);avgSalary = rs.getBigDecimal(2);-li (rs.další()) { // Chyba - nalezen více než jeden řádek}rs.zavřít();známka.zavřít(); | #sql [ctx] { VYBRAT MAX(PLATBA), AVG(PLATBA) DO :maxSalary, :avgSalary Z DSN8710.EMP}; |
JDBC | SQLJ |
---|---|
známka = spoj.připravit prohlášení( „INSERT INTO DSN8710.EMP“ + „(EMPNO, FIRSTNME, MIDINIT, LASTNAME, HIREDATE, SALARY)“ + „HODNOTY (?,?,?,?, AKTUÁLNÍ DATUM,?)“);známka.setString(1, empno);známka.setString(2, jméno);známka.setString(3, midinit);známka.setString(4, příjmení);známka.setBigDecimal(5, plat);známka.executeUpdate();známka.zavřít(); | #sql [ctx] { VLOŽIT DO DSN8710.EMP (EMPNO, PRVNÍ, MIDINIT, PŘÍJMENÍ, NABÍDKA, PLATBA) HODNOTY (:empno, :jméno, :midinit, :příjmení, PROUD DATUM, :plat)}; |
Viz také
Reference
- ^ A b C Jim Melton (2003). Advanced SQL: 1999. Morgan Kaufmann. str.352 -364. ISBN 978-1-55860-677-7.
Další čtení
- Connie Tsui, Zvažování SQLJ pro vaše aplikace Java V8 produktu DB2 V8, IBM vývojářské práce, 13. února 2003
- Owen Cline, Rozvíjejte své aplikace pomocí SQLJ, IBM developerworks, 16. prosince 2004
- Jason Price (2001). Programování v Javě s Oracle SQLJ. O'Reilly Media. ISBN 978-0-596-00087-5.