SQLJ - SQLJ

SQLJ это рабочее название усилий по объединению Ява и SQL. Это была совместная работа, начатая примерно в 1997 году инженерами из IBM, Oracle, Compaq, Informix, Sybase, Cloudscape и Sun Microsystems.

Он состоит из трех частей: 0, 1 и 2. Часть 0 описывает встраивание операторов SQL в программы Java. SQLJ part 0 является основой для части 10 SQL: 1999 стандарт, он же Привязки языка объектов SQL (SQL / OLB).[1] Части 1 и 2 SQLJ описывают обратную возможность использования классов (подпрограмм и типов) Java из операторов SQL. Части 1 и 2 являются основой для части 13 стандарта SQL, Подпрограммы и типы SQL с использованием языка программирования Java (SQL / JRT).

"SQLJ" обычно используется для обозначения только части 0 SQLJ, обычно в отличие от других средств встраивания SQL в Java, например JDBC.

Стандарты ANSI и ISO

  • SQLJ, часть 0: ANSI X3.135.10-1998, "Язык баз данных SQL - Часть 10: Привязки объектного языка (SQL / OLB)"
  • SQLJ, часть 1: ANSI NCITS 331.1-1999, "SQLJ - Часть 1: Подпрограммы SQL с использованием языка программирования Java"
  • SQLJ, часть 2: ANSI NCITS 331.2-2000, «SQLJ. Часть 2: Типы SQL с использованием языка программирования Java»

Часть 0 была обновлена ​​для совместимости с JDBC 2.0 и ратифицирована ISO в 2000 году. Последние две части были объединены при представлении в ISO. Часть 2 была существенно переписана для представления ISO, потому что версия ANSI не была достаточно формальной для спецификации, будучи ближе к стилю руководство пользователя. Комбинированный вариант был ратифицирован в 2002 году.[1]

  • ИСО / МЭК 9075-10: 2000, Информационные технологии - Языки баз данных - SQL - Часть 10: Привязки объектных языков (SQL / OLB)
  • ИСО / МЭК 9075-13: 2002, Информационные технологии - Языки баз данных - SQL - Часть 13: Процедуры и типы SQL с использованием языка программирования Java (SQL / JRT).

SQLJ часть 0

Спецификация SQLJ part 0 в значительной степени была создана Oracle, которая также предоставила первую эталонную реализацию.[1]

Далее SQLJ является синонимом части 0 SQLJ.

В то время как JDBC обеспечивает API, SQLJ состоит из язык расширение. Таким образом, программы, содержащие SQLJ, должны выполняться через препроцессор (переводчик SQLJ), прежде чем их можно будет скомпилировать.

Преимущества

Некоторые преимущества SQLJ над JDBC включают:

  • Команды SQLJ обычно короче, чем эквивалентные программы JDBC.
  • Синтаксис SQL можно проверить во время компиляции. Возвращенные результаты запроса также можно строго проверять.
  • Препроцессор может генерировать статический SQL, который работает лучше, чем динамический SQL, потому что план запроса создается во время компиляции программы, сохраняется в базе данных и повторно используется во время выполнения. Статический SQL может гарантировать стабильность плана доступа. IBM DB2 поддерживает использование статического SQL в программах SQLJ.

Недостатки

  • SQLJ требует предварительной обработки.
  • Много Иды не имеют поддержки SQLJ.
  • SQLJ не поддерживает большинство распространенных фреймворков сохраняемости, таких как Спящий режим.
  • Oracle 18c (12.2) отказался от поддержки SQLJ в базе данных.

Примеры

В следующих примерах синтаксис SQLJ сравнивается с использованием JDBC.

Многострочный запрос
JDBCSQLJ
Подготовленное заявление stmt = conn.подготовить заявление(   «ВЫБЕРИТЕ ФАМИЛИЯ» + ", FIRSTNME" + " , ЗАРПЛАТА" + "ИЗ DSN8710.EMP" + "ГДЕ ЗАПЛАТА МЕЖДУ? И?");stmt.setBigDecimal(1, мин);stmt.setBigDecimal(2, Максимум);ResultSet RS = stmt.executeQuery();в то время как (RS.Следующий()) {  фамилия = RS.getString(1);  имя = RS.getString(2);  зарплата = RS.getBigDecimal(3);  // Выводим строку ...}RS.близко();stmt.близко();
#sql частный статический итератор EmployeeIterator(Строка, Строка, BigDecimal);...EmployeeIterator iter;#sql [ctx] iter = {  ВЫБРАТЬ ФАМИЛИЯ       , FIRSTNME       , ЗАРПЛАТА    ОТ DSN8710.EMP   ГДЕ ЗАРПЛАТА МЕЖДУ :мин И :Максимум};делать {  #sql {    ПОЛУЧИТЬ :iter     В :фамилия, :имя, :зарплата  };  // Распечатать ряд...} в то время как (!iter.endFetch());iter.близко();
Однострочный запрос
JDBCSQLJ
Подготовленное заявление stmt = conn.подготовить заявление(    «ВЫБЕРИТЕ МАКС. (ЗАРПЛАТУ), СРЕДН. (ЗАПЛАТУ)»  + "ИЗ DSN8710.EMP");RS = stmt.executeQuery();если (!RS.Следующий()) {  // Ошибка - строк не найдено}maxSalary = RS.getBigDecimal(1);avgSalary = RS.getBigDecimal(2);если (RS.Следующий()) {  // Ошибка - найдено более одной строки}RS.близко();stmt.близко();
#sql [ctx] {  ВЫБРАТЬ МАКСИМУМ(ЗАРПЛАТА), AVG(ЗАРПЛАТА)    В :maxSalary, :avgSalary    ОТ DSN8710.EMP};
ВСТАВИТЬ
JDBCSQLJ
stmt = conn.подготовить заявление(   "ВСТАВИТЬ В DSN8710.EMP" +   "(EMPNO, FIRSTNME, MIDINIT, LASTNAME, HIREDATE, SALARY)" + "ЗНАЧЕНИЯ (?,?,?,?, ТЕКУЩАЯ ДАТА,?)");stmt.setString(1, empno);stmt.setString(2, имя);stmt.setString(3, midinit);stmt.setString(4, фамилия);stmt.setBigDecimal(5, зарплата);stmt.executeUpdate();stmt.близко();
#sql [ctx] {  ВСТАВИТЬ В DSN8710.EMP    (EMPNO,  FIRSTNME,   MIDINIT,  ФАМИЛИЯ,  ДАТА ПРИЕМА НА РАБОТУ,     ЗАРПЛАТА)  ЦЕННОСТИ    (:empno, :имя, :midinit, :фамилия, ТЕКУЩИЙ ДАТА, :зарплата)};

Смотрите также

использованная литература

  1. ^ а б c Джим Мелтон (2003). Продвинутый SQL: 1999. Морган Кауфманн. стр.352 -364. ISBN  978-1-55860-677-7.

дальнейшее чтение

внешние ссылки