SQLJ

SQLJ è uno standard ISO (ISO/IEC 9075-10) per istruzioni SQL incorporate in programmi Java.

Al contrario di JDBC, SQLJ non è un'API ma un'estensione del linguaggio. In tal modo i programmi SQLJ devono essere eseguiti da un preprocessore (lo SQLJ translator) prima di essere compilati.

Alcuni vantaggi di SQLJ su JDBC:

  • I programmi SQLJ tendono ad essere più brevi di quelli JDBC.
  • La sintassi SQL può essere controllata in fase di compilazione.

Alcuni svantaggi di SQLJ rispetto a JDBC:

  • SQLJ richiede un preprocesso.
  • Molte IDE non hanno un supporto specifico per SQLJ.
  • Non c'è supporto SQLJ in alcune piattaforme middleware, come Hibernate.

Esempi[modifica | modifica wikitesto]

I seguenti esempi mostrano i diversi usi della sintassi di SQLJ e JDBC.

JDBC SQLJ
Query multi-riga
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 }; while (true) {   #sql {     FETCH :iter      INTO :lastname, :firstname, :salary   };   if (iter.endFetch()) break;   // Print row... } iter.close(); 
Query di una riga
PreparedStatement stmt = conn.prepareStatement(     "SELECT MAX(SALARY), AVG(SALARY)"   + " FROM DSN8710.EMP"); rs = statement.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 }; 
INSERT
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) }; 

Collegamenti esterni[modifica | modifica wikitesto]

  Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica