SQLJ
Aspetto
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]- IBM Redbook: DB2 for z/OS and OS/390: Ready for Java, su redbooks.ibm.com.