SDK for Java バージョン 5 の機能の SQLJ での利用
SQLJ アプリケーションで、SDK for Java バージョン 5 で導入された多くの機能を使用することができます。
静的インポート
import static 構文を使用すれば、静的メンバーが属しているクラスの名前でそれらのメンバーを修飾せずに、静的メンバーにアクセスすることができます。 つまり SQLJ アプリケーションの場合、静的メンバーを修飾せずにホスト式でそれらのメンバーを使用することができます。
double r = cos(PI * E);import static java.lang.Math.*;アノテーション
Javaアノテーションは、Javaプログラムにメタデータを追加する手段であり、それにより、ツールやライブラリによるプログラムの処理方法にも影響を与えることができます。 アノテーションは、インターフェース宣言と同様なアノテーション型宣言で宣言されます。 Javaアノテーションは、以下のタイプのクラスまたはインターフェースに記述することができます
- クラス宣言
- インターフェース宣言
- ネスト・クラス宣言
- ネスト・インターフェース宣言
SQLJプログラムに直接Javaアノテーションを含めることはできませんが、Javaソースコードにアノテーションを含め、そのソースコードをSQLJプログラムに含めることはできます。
public @interface MyAnot { }次のマーカー・アノテーションも MyAnnot2.java というプログラム内で宣言します。public @interface MyAnot2 { }// 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 { }
}列挙型
列挙型とは、一連の順序付けられた値で構成されるデータ型のことです。 Java バージョン 5 の SDK では、列挙型に enum 型が導入されています。
- SQLJプログラムに含めるJavaソースファイル(.javaファイル)
- SQLJ のクラス宣言内
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;
}総称
Javaコレクションに型を割り当てるために、Javaプログラムでジェネリクスを使用することができます。 SQLJ 翻訳プログラムは、Java のジェネリクス構文を許容します。 総称は SQLJ ホスト変数内で使用できますが、総称の使用の意義は、SQLJ 変換プログラムではそれらのホスト変数の型を判別できないため限られています。
- List オブジェクトの List:
List <List<String>> strList2 = new ArrayList<List<String>>(); - キーと値の組みが String 型である HashMap:
Map <String,String> map = new HashMap<String,String>(); - 任意の型のエレメントを持つ List を使用するメソッド:
public void mthd(List <?> obj) { … }
- メソッドの戻りの型で総称をネストする:
public* List<Map<String, Object>> *method(String, String, String);
拡張されたされた for ループ
拡張された for を使用すれば、一連の命令をコレクションまたは配列の各メンバーに対して実行することを指定できます。 イテレーターを、拡張された for ループ内でホスト式で使用することができます。
String[] names = {"ABC","DEF","GHI"};
for (String n : names)
{
#sql {INSERT INTO TAB (VARCHARCOL) VALUES(:n) };
}可変引数
可変引数により、任意の数の値をメソッドに受け渡すことが容易になります。 メソッド宣言の最後の引数の位置にある可変引数により、最後の引数が配列または一続きの引数であることが示されます。 SQLJ プログラムでは、受け渡されたホスト式内の引数を使用することができます。
public void runThis(Object... objects) throws SQLException
{
for (Object obj : objects)
{
#sql { INSERT INTO TAB (VARCHARCOL) VALUES(:obj) };
}
}