Utilización en SQLJ de funciones del SDK de Java Versión 5

Las aplicaciones SQLJ puede utilizar varias funciones que aparecieron con el SDK de Java Versión 5.

Importación estática

La importación estática le permite acceder a miembros estáticos sin calificarlos con el nombre de la clase a la que pertenecen. Para las aplicaciones SQLJ, esto significa que puede utilizar miembros estáticos en expresiones de lenguaje principal sin calificarlos.

Ejemplo: suponga que desea declarar una expresión de lenguaje principal que tiene este formato:
double r = cos(PI * E);
cos, PI y E son miembros de la clase java.lang.Math. Para declarar r sin calificar explícitamente cos, PI y E, incluya la siguiente sentencia de importación estática en su programa:
import static java.lang.Math.*;

Anotaciones

Las anotaciones Java son un medio para añadir metadatos a los programas Java que también pueden afectar a la forma en que esas herramientas y bibliotecas tratan esos programas. Las anotaciones se declaran con declaraciones de tipo anotación, que son similares a las declaraciones de interfaz. Las anotaciones Java pueden aparecer en los siguientes tipos de clases o interfaces:

  • Declaración de clase
  • Declaración de interfaz
  • Declaración de clase anidada
  • Declaración de interfaz anidada

No puede incluir anotaciones Java directamente en programas SQLJ, pero puede incluir anotaciones en código fuente Java y, a continuación, incluir ese código fuente en sus programas SQLJ.

Ejemplo: suponga que declara la siguiente anotación de marcador en un programa llamado MyAnnot.java:
public @interface MyAnot { }
También declara la siguiente anotación de marcador en un programa llamado MyAnnot2.java:
public @interface MyAnot2 { }
Puede luego utilizar esas anotaciones en un programa SQLJ:
// Class annotations
@MyAnot2 public @MyAnot class  TestAnnotation   
{
  // Field annotation
  @MyAnot
  private static final int field1 = 0;          
  // Constructor annotation
  @MyAnot2 public @MyAnot TestAnnotation  () { } 
   // Method annotation
   @MyAnot             
   public static void main (String a[]) 
   {
      TestAnnotation TestAnnotation_o = new TestAnnotation();
      TestAnnotation_o.runThis();
   }
  // Inner class annotation
  public static @MyAnot class TestAnotherInnerClass { }
  // Inner interface annotation
  public static @MyAnot interface TestAnotInnerInterface { }
}

Tipos enumerados

Un tipo enumerado es un tipo de datos que consta de un conjunto de valores ordenados. El SDK para Java versión 5 introduce el tipo " enum " para tipos enumerados.

Puede incluir enums en los lugares siguientes:
  • En archivos fuente Java (archivos.java) que se incluyen en un programa SQLJ
  • En declaraciones de clases de SQLJ

Ejemplo: la declaración de clase TestEnum.sqlj incluye un tipo enum:
public class TestEnum2
{
  public enum Color {
	  RED,ORANGE,YELLOW,GREEN,BLUE,INDIGO,VIOLET}
  Color color;
  …                          // Get the value of color
  switch (color) {
	case RED: 
    System.out.println("Red is at one end of the spectrum.");
    #sql[ctx] { INSERT INTO MYTABLE VALUES (:color) };
	  break;
	case VIOLET:
    System.out.println("Violet is on the other end of the spectrum.");
	  break;
	case ORANGE:
	case YELLOW:
	case GREEN:
  case BLUE:
  case INDIGO:
    System.out.println("Everything else is in the middle.");
	  break;
}

Valores genéricos

Puede utilizar genéricos en sus programas Java para asignar un tipo a una colección Java. El traductor SQLJ tolera la sintaxis genérica de Java. Aunque puede utilizar valores genéricos en variables de lenguaje principal de SQLJ, la utilidad de hacer esto es limitada porque el programa traductor de SQLJ no puede determinar los tipos de esas variables de lenguaje principal.

Esto son ejemplos de valores genéricos que puede utilizar en programas SQLJ:
  • Una lista (List) de objetos List:
    List <List<String>> strList2 = new ArrayList<List<String>>();
  • Un HashMap cuyo par clave/valor es de tipo String:
    Map <String,String> map = new HashMap<String,String>();
    
  • Un método que utiliza como entrada una lista (List) con elementos de cualquier tipo:
    public void mthd(List <?> obj) {
    …
    }
Algunos ejemplos de usos no válidos de genéricos en los programas SQLJ son:
  • Generics anidados en el tipo de retorno de método:
    public* List<Map<String, Object>> *method(String, String, String);

Bucle for mejorado

El bucle for mejorado le permite especificar la ejecución de un conjunto de operaciones para todos los miembros de una colección o matriz. Puede utilizar el iterador del bucle for mejorado en expresiones de lenguaje principal.

Ejemplo: la sentencia siguiente inserta cada elemento de la matriz names en la tabla TAB.
String[] names = {"ABC","DEF","GHI"};
for (String n : names) 
{
  #sql {INSERT INTO TAB (VARCHARCOL) VALUES(:n) };
}

Varargs

Varargs facilita el pase de un número arbitrario de valores a un método. Un Vararg situado en la última posición de argumento de una declaración de método indica que los últimos argumentos son una matriz o secuencia de argumentos. Los argumentos pasados pueden ser utilizados por un programa SQLJ en expresiones de lenguaje principal.

Ejemplo: este ejemplo muestra el pase de un número arbitrario de parámetros de tipo Object a un método que inserta cada valor de parámetro en la tabla TAB.
public void runThis(Object...  objects) throws SQLException
{
  for (Object obj : objects) 
  {
    #sql { INSERT INTO TAB (VARCHARCOL) VALUES(:obj) };
  }
}