Technopedia Center
PMB University Brochure
Faculty of Engineering and Computer Science
S1 Informatics S1 Information Systems S1 Information Technology S1 Computer Engineering S1 Electrical Engineering S1 Civil Engineering

faculty of Economics and Business
S1 Management S1 Accountancy

Faculty of Letters and Educational Sciences
S1 English literature S1 English language education S1 Mathematics education S1 Sports Education
teknopedia

teknopedia

teknopedia

teknopedia

teknopedia
  • Registerasi
  • Brosur UTI
  • Kip Scholarship Information
  • Performance
  1. Weltenzyklopädie
  2. SQLJ – Wikipedia
SQLJ – Wikipedia
aus Wikipedia, der freien Enzyklopädie

SQLJ ist ein mittlerweile veralteter Arbeitstitel für Bestrebungen, Java und SQL zusammenzuführen. SQLJ Teil 0 definiert die Möglichkeit, SQL Statements in Java-Programme einzubinden. Teil 0 wurde mittlerweile als Teil 10 Object Language Bindings (SQL/OLB) des Standards ISO/IEC 9075 der Datenbanksprache SQL übernommen. Die Teile 1 und 2 beschreiben den umgekehrten Weg, nämlich Java Klassen (Routines and Types) in SQL Statements anzusprechen. Teil 1 und 2 wurden als SQL Teil 13 SQL Routines and Types Using the Java Programming Language in SQL standardisiert.

Im Folgenden steht der Begriff SQLJ als Synonym für SQLJ Part 0.

Mit SQLJ ist Embedded SQL für Java definiert. Im Gegensatz dazu stellt JDBC eine API bereit.

Format

[Bearbeiten | Quelltext bearbeiten]

Die eingebettete SQL-Anweisungen haben das folgende Format:

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

Sie beginnen mit der Zeichenfolge #sql, können mehrere Zeilen umfassen und enden mit einem Semikolon. Sie können Java-Variablen (:x) und Ausdrücke :(y + z) enthalten.

Vor- und Nachteile

[Bearbeiten | Quelltext bearbeiten]

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 Profilen (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.

Beispiele und Vergleich mit JDBC

[Bearbeiten | Quelltext bearbeiten]

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

JDBC SQLJ
Abfrage
PreparedStatement stmt = conn.prepareStatement(
   "SELECT LASTNAME"
 + " , FIRSTNAME"
 + " , 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

[Bearbeiten | Quelltext bearbeiten]
  • IBM Redbook: DB2 for z/OS and OS/390: Ready for Java
Abgerufen von „https://de.teknopedia.teknokrat.ac.id/w/index.php?title=SQLJ&oldid=249461578“
Kategorien:
  • Datenbanksprache
  • SQL
  • Java (Programmiersprache)
  • Abkürzung

  • indonesia
  • Polski
  • العربية
  • Deutsch
  • English
  • Español
  • Français
  • Italiano
  • مصرى
  • Nederlands
  • 日本語
  • Português
  • Sinugboanong Binisaya
  • Svenska
  • Українська
  • Tiếng Việt
  • Winaray
  • 中文
  • Русский
Sunting pranala
Pusat Layanan

UNIVERSITAS TEKNOKRAT INDONESIA | ASEAN's Best Private University
Jl. ZA. Pagar Alam No.9 -11, Labuhan Ratu, Kec. Kedaton, Kota Bandar Lampung, Lampung 35132
Phone: (0721) 702022
Email: pmb@teknokrat.ac.id