Jump to content

SQLJ

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

Он состоит из трех частей: 0, 1 и 2. Часть 0 описывает встраивание операторов SQL в программы Java. SQLJ, часть 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]

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

SQLJ, часть 0

[ редактировать ]

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

В дальнейшем SQLJ является синонимом SQLJ, часть 0.

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

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

[ редактировать ]

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

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

Недостатки

[ редактировать ]
  • SQLJ требует этапа предварительной обработки.
  • Многие IDE не поддерживают SQLJ.
  • В SQLJ отсутствует поддержка большинства распространенных инфраструктур персистентности, таких как Hibernate .
  • Oracle 18c (12.2) прекратил поддержку SQLJ в базе данных.

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

Многострочный запрос
JDBC SQLJ
PreparedStatement stmt = conn.prepareStatement(
   "SELECT LASTNAME"
 + " , FIRSTNME"
 + " , SALARY"
 + " FROM DSN8710.EMP"
 + " WHERE SALARY BETWEEN ? AND ?");
stmt.setBigDecimal(1, min);
stmt.setBigDecimal(2, max);
ResultSet rs = stmt.executeQuery();
while (rs.next()) {
  lastname = rs.getString(1);
  firstname = rs.getString(2);
  salary = rs.getBigDecimal(3);
  // Print row...
}
rs.close();
stmt.close();
#sql private static iterator EmployeeIterator(String, String, BigDecimal);
...
EmployeeIterator iter;
#sql [ctx] iter = {
  SELECT LASTNAME
       , FIRSTNME
       , SALARY
    FROM DSN8710.EMP
   WHERE SALARY BETWEEN :min AND :max
};
do {
  #sql {
    FETCH :iter
     INTO :lastname, :firstname, :salary
  };
  // Print row...
} while (!iter.endFetch());
iter.close();
Однострочный запрос
JDBC SQLJ
PreparedStatement stmt = conn.prepareStatement(
    "SELECT MAX(SALARY), AVG(SALARY)"
  + " FROM DSN8710.EMP");
rs = stmt.executeQuery();
if (!rs.next()) {
  // Error—no rows found
}
maxSalary = rs.getBigDecimal(1);
avgSalary = rs.getBigDecimal(2);
if (rs.next()) {
  // Error—more than one row found
}
rs.close();
stmt.close();
#sql [ctx] {
  SELECT MAX(SALARY), AVG(SALARY)
    INTO :maxSalary, :avgSalary
    FROM DSN8710.EMP
};
ВСТАВЛЯТЬ
JDBC SQLJ
stmt = conn.prepareStatement(
   "INSERT INTO DSN8710.EMP " +
   "(EMPNO, FIRSTNME, MIDINIT, LASTNAME, HIREDATE, SALARY) "
 + "VALUES (?, ?, ?, ?, CURRENT DATE, ?)");
stmt.setString(1, empno);
stmt.setString(2, firstname);
stmt.setString(3, midinit);
stmt.setString(4, lastname);
stmt.setBigDecimal(5, salary);
stmt.executeUpdate();
stmt.close();
#sql [ctx] {
  INSERT INTO DSN8710.EMP
    (EMPNO,  FIRSTNME,   MIDINIT,  LASTNAME,  HIREDATE,     SALARY)
  VALUES
    (:empno, :firstname, :midinit, :lastname, CURRENT DATE, :salary)
};

См. также

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

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

[ редактировать ]
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 76ef8c41e28bc76ea8551e69f6a0a37f__1590454920
URL1:https://arc.ask3.ru/arc/aa/76/7f/76ef8c41e28bc76ea8551e69f6a0a37f.html
Заголовок, (Title) документа по адресу, URL1:
SQLJ - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)