SQLJ

SQLJ

SQLJ (Embedded SQL) ist ein eingebettetes SQL für Java.

SQLJ ermöglicht eine direkte Einbettung von SQL-Anweisungen in Java-Code, wobei die statischen SQL-Anweisungen zur Übersetzungszeit syntaktisch und semantisch überprüft werden können.

SQLJ bietet mehrere Vorteile:

  • die Programmierung ist im Vergleich zu JDBC wesentlich einfacher, da SQLJ direkt auf Variablen des umgebenden Java-Codes zugreifen kann.
  • im Falle von SQLJ für IBMs DB2 besteht eine bessere Authentifizierungskontrolle, da Benutzerrechte nicht auf Basis von Tabellen, sondern auf Basis von gebundenen SQLJ Profile (Packages) geprüft werden, damit ist eine programmorientierte Berechtigung möglich.
  • Der SQLJ Translator überprüft die Syntax und Semantik von SQL-Anweisungen. Es besteht so die Möglichkeit die Anweisungen gegen das Datenbankschema zu prüfen, wobei SQL-Fehler frühzeitig entdeckt und behoben werden können. Im Gegensatz hierzu werden bei Verwendung von JDBC Fehler erst zur Laufzeit erkannt.

Nachteile sind:

  • SQLJ-Programme müssen mittels eines Präprozessors in Java-Quelltext transformiert werden
  • die SQLJ Syntax wird von vielen Entwicklungsumgebungen nicht erkannt
  • SQLJ wird durch gängige Persistenz-Frameworks wie Hibernate nicht unterstützt
  • Der Präprozessor versteht, Stand Anfang 2006, noch keine Elemente der Java-Syntax, die mit den Versionen 1.4 (assert) und 5.0 (Generische Typen, Extended For Loop, u.a.) eingeführt wurden.
  • Der Präprozessor lädt unter Umständen Klassen, von denen die zu übersetzende Klasse abhängt. Dadurch werden ggf. Klasseninitialisierer ausgeführt, was u.U. Nebenwirkungen auslöst oder die Übersetzungszeit verlängert.

Eingebettete SQL-Anweisungen haben das folgende Format:

 #sql [[<context>]] { <SQL-Anweisung> }

Sie beginnen mit #sql und können mehrere Zeilen umfassen. Sie können Variablen der Programmiersprache (:x ) bzw. Ausdrücke :(y + z) enthalten.

Beispiele

Die folgenden Beispiele vergleichen SQLJ-Syntax mit JDBC-Aufrufen:

JDBC SQLJ
Abfrage
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);
  // Zeile drucken...
}
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
};
while (true) {
  #sql {
    FETCH :iter
     INTO :lastname, :firstname, :salary
  };
  if (iter.endFetch()) break;
  // Zeile drucken...
}
iter.close();
Abfrage, die genau eine Zeile liefert
PreparedStatement stmt = conn.prepareStatement(
    "SELECT MAX(SALARY), AVG(SALARY)"
  + " FROM DSN8710.EMP");
rs = statement.executeQuery();
if (!rs.next()) {
  // Fehler -- nichts gefunden
}
maxSalary = rs.getBigDecimal(1);
avgSalary = rs.getBigDecimal(2);
if (rs.next()) {
  // Fehler -- mehr als ein Treffer
}
rs.close();
stmt.close();
#sql [ctx] {
  SELECT MAX(SALARY), AVG(SALARY)
    INTO :maxSalary, :avgSalary
    FROM DSN8710.EMP
};
INSERT
PreparedStatement 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)
};

Weblinks


Wikimedia Foundation.

Игры ⚽ Нужно решить контрольную?

Schlagen Sie auch in anderen Wörterbüchern nach:

  • SQLJ — SQLJ  подмножество стандарта SQL, направленное на объединение преимуществ синтаксиса языков SQL и Java ради удобства реализации бизнес логики и работы с данными. Данный стандарт разработан консорциумом, состоящим из компаний IBM, Micro Focus …   Википедия

  • Sqlj — подмножество стандарта Java ради удобства реализации бизнес логики и работы с данными. Данный стандарт разработан консорциумом, состоящим из компаний Microsoft, Informix, Oracle, Sun и Содержание 1 Предыстория 2 Пример кода 3 SQLJ и JDBC 4… …   Википедия

  • SQLJ — Saltar a navegación, búsqueda SQLJ es un estándard ISO (ISO/IEC 9075 10) para embeber sentencias SQL en programas de Lenguaje de programación Java. Al contrario que JDBC, SQLJ no es una API sino una extensión del lenguaje. Así, los programas SQLJ …   Wikipedia Español

  • SQLJ — is an ISO standard (ISO/IEC 9075 10) for embedding SQL statements in Java programs.Unlike JDBC, SQLJ is not an API but a language extension. Thus, SQLJ programs must be run through a preprocessor (the SQLJ translator) before they can be… …   Wikipedia

  • SQLJ — abbr. Structured Query Language Java (SQL, Java, DB, ANSI, NCITS) …   United dictionary of abbreviations and acronyms

  • SQL — This article is about the database language. For the airport with IATA code SQL, see San Carlos Airport. SQL Paradigm(s) Multi paradigm Appeared in 1974 Designed by Donald D. Chamberlin Raymond F. Boyce Developer …   Wikipedia

  • SQL/OLB — The SQL/OLB, or Object Language Bindings , extension to the SQL standard is defined by ISO/IEC 9075 10:2003. SQL/OLB defines the syntax and symantics of SQLJ, which is SQL embedded in Java. The standard also describes mechanisms to ensure binary… …   Wikipedia

  • Pro*C — [pɹoʊˈsiː]/Pro*C++ [ ˈplʌs ˈplʌs] ist ein Precompiler des Unternehmens Oracle für die Programmiersprache C und C++. Mittels des Precompilers ist es möglich, SQL Ausdrücke und normale C oder C++ Quellcode Elemente miteinander zu vermischen. Dies… …   Deutsch Wikipedia

  • SQL-92 — SQL (das Kürzel für Structured Query Language; offizielle Aussprache [ɛskjuːˈɛl], häufig auch [ˈsiːkwəl] →SEQUEL), ist eine Datenbanksprache zur Definition, Abfrage und Manipulation von Daten in relationalen Datenbanken. SQL ist von ANSI und ISO… …   Deutsch Wikipedia

  • SQL-99 — SQL (das Kürzel für Structured Query Language; offizielle Aussprache [ɛskjuːˈɛl], häufig auch [ˈsiːkwəl] →SEQUEL), ist eine Datenbanksprache zur Definition, Abfrage und Manipulation von Daten in relationalen Datenbanken. SQL ist von ANSI und ISO… …   Deutsch Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”