SQLJ

From XennisWiki
Jump to: navigation, search

SQLJ is an outdated working title for efforts to combine Java and SQL. [...] It consists of the three parts: 0, 1 and 2. Part 0 describes the embedding of SQL statements into Java programs. SQLJ part 0 is the basis for part 10 of the SQL:1999 standard, aka SQL Object Language Bindings (SQL/OLB). SQLJ parts 1 and 2 describes the converse possibility to use Java classes (routines and types) from SQL statements. Parts 1 and 2 are the basis for part 13 of the SQL standard, SQL Routines and Types Using the Java Programming Language (SQL/JRT). "SQLJ" is commonly used to refer to just SQLJ part 0, usually when it is contrasted with other means of embedding SQL in Java, like JDBC. (Wikipedia)

Ein Vorteil von SQLJ besteht darin, dass (syntaktische) Fehler in SQL Anfragen bereits zur Übersetzungszeit erkannt werden. Jedoch ist es dabei nicht besonders flexibel.

Installation

  • Öffne die Umgebungsvariablen
  • Füge der Systemvariable CLASSPATH den folgenden Pfad hinzu (Pfad muss entsprechend angepasst werden)
C:\Program Files\sqlj\sqlj_1011_stored\sqlj\lib\translator.zip
  • Erweitere die Systemvariable PATH um (Pfad muss entsprechend angepasst werden)
C:\Program Files\sqlj\sqlj_1011_stored\sqlj\bin

Beispieltabelle

Für die Datenbanktabelle, auf die sich der Code bezieht, siehe Java Database Connectivity.

Beispielprogramm

Das Programm stellt mittels SQLH eine Verbindung zur HyperSQL Database Engine her.

Sqlj.sqlj

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

import sqlj.runtime.ref.*;

#sql iterator AlbumItr(String Albumtitel, int Erscheinungsjahr);
#sql iterator AverageItr(double AvgBewertung);

/*
 * Das Programm stellt mittels SQLH eine Verbindung zur HyperSQL Database Engine her.
 */
public class Sqlj {

	/** Verbindung zur Datenbank */
	private static Connection connection;
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		connectToDb("org.hsqldb.jdbcDriver", "jdbc:hsqldb:hsql://localhost/", "sa", "");
		show();
		exit();	
	}
	
	private static void show() {
		try {
			AlbumItr alben;
			#sql alben = { Select Albumtitel, Erscheinungsjahr From Album};
			
			System.out.println("Titel\tErscheinungsjahr");
			while(alben.next()) {
				System.out.println(alben.Albumtitel() + "\t" + alben.Erscheinungsjahr());
			}
			
			AverageItr bewertungAvg;
			#sql bewertungAvg = {Select Avg(Bewertung) As AvgBewertung From Album};
			
			bewertungAvg.next();
			System.out.println("\nDurschnittsbewertung\t:" + bewertungAvg.AvgBewertung());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * Stellt die Verbindung mit der Datenbank her und setzet den DefaultContext.
	 * 
	 * @param driver
	 *            Treiber der Datenbank
	 * @param url
	 *            Datenbank-URL
	 * @param user
	 *            Datenbank-Benutzer
	 * @param passwort
	 *            Benutzer-Passwort
	 * @return Verbindung zur Datenbank oder Null
	 */
	private static void connectToDb(String driver, String url, String user, String passwort) {
		try {
			// Connect
			Class.forName(driver);
			connection = DriverManager.getConnection(url, user, passwort);
			connection.setAutoCommit(false);
			// Context
			DefaultContext dc = new DefaultContext(connection);
			DefaultContext.setDefaultContext(dc);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * Beendet das Programm.
	 */
	private static void exit() {
		try {
			connection.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

}

Ausführen

  • Öffne die Konsole und wechsel in das Verzeichnis, wo die deine Datei liegt
sqlj Sqlj.sqlj
  • Wenn es keine Fehler gab, wurde eine Java-Datei erstellt, die nun kompilieren kannst
javac Sqlj.java
  • Das Programm ausführen
java Sqlj

See also