2012年9月30日日曜日

PL/SQLで更新結果の取得

SQL%属性を使用して、更新有無や更新件数を取得できます。

下の例は、update文になっているけどdeleteやmergeなどでも同じように取得できます。
begin
  update account set name = '名前変更' where id = '00001';
  -- sql%foundを使用して更新有無を判断
  -- trueの場合は更新あり
  if (sql%found) then
    dbms_output.put_line('updated');
  else
    dbms_output.put_line('no updated');
  end if;
  -- sql%rowcountで更新件数を取得
  dbms_output.put_line(sql%rowcount);
end;

実行結果

updated
1

PL/SQL procedure successfully completed.

2012年9月22日土曜日

GroovyのInheritConstructorsアノテーション

クラスにInheritConstructorsアノテーションを付加すると、親クラスが実装しているコンストラクタをコンパイル時に追加してくれます。

Fugaは、引数を2つうけるコンストラクタを持っていないが「InheritConstructors」を設定しているので、親クラスのHogeが実装しているコンストラクタが追加されていることがわかる。

import groovy.transform.InheritConstructors

class Hoge {

  def hoge1
  def hoge2

  Hoge(hoge1, hoge2) {
    println "Hoge.Hoge"
    this.hoge1 = hoge1
    this.hoge2 = hoge2
  }

  @Override
  public String toString() {
    return "Hoge{" +
            "hoge1=" + hoge1 +
            ", hoge2=" + hoge2 +
            '}';
  }
}

@InheritConstructors
class Fuga extends Hoge {
}

def fuga = new Fuga("hoge1", "hoge2")
println "fuga = ${fuga}"

GroovyのEqualsAndHashCodeアノテーション

equalsとhashCodeを生成してくれるアノテーション

EqualsAndHashCodeを付加してクラスを宣言します。

import groovy.transform.EqualsAndHashCode

@EqualsAndHashCode
class Person {

  String name
  String address
  Date birthDay
  String mailAddress

}

2012年9月16日日曜日

GroovyのTupleConstructorアノテーション

TupleConstructorを付加すると、属性(フィールド)値を引数に取るコンストラクタが追加されます。
コンストラクタの引数の順番は、フィールドの宣言の順番となります。

TupleConstructorを付加してクラスを宣言します。
import groovy.transform.TupleConstructor

@TupleConstructor
class Person {
  String name
  String address
  String email
  Date birthDay
}

使い方は、フィールドの宣言順に値を設定するだけ。
なお、Groovy2.0の新機能のTypeCheckedアノテーション(コンパイル時に型チェックをしてくれるやつ)を付加すると、ちゃんとコンパイルエラーになります。
class Hoge {

  @TypeChecked
  public static void main(String[] args) {

    def person = new Person('name', 'address', 'mail@mail.com', new Date())
  }
}

2012年9月14日金曜日

GroovyのToStringアノテーション

クラスに「ToString」アノテーションを付加すると、コンパイル時にtoStringメソッドが生成されます。

デフォルトでは、すべてのフィールドがtoStringメソッドで文字列変換されますが、アノテーションの属性を設定することで除外設定などもできます。

2012年9月7日金曜日

Nio2でファイル属性

NIO2を使ってファイルの属性を取得する方法。

// 最後の更新日時
System.out.println("Files.getLastModifiedTime(path) = " + Files.getLastModifiedTime(path));
// ファイルサイズ
System.out.println("Files.size(path) = " + Files.size(path));
// 読み込み可能?
System.out.println("Files.isReadable(path) = " + Files.isReadable(path));
// 書き込み可能?
System.out.println("Files.isWritable(path) = " + Files.isWritable(path));
// シンボリックリンク?
System.out.println("Files.isSymbolicLink(path) = " + Files.isSymbolicLink(path));
// ディレクトリ
System.out.println("Files.isDirectory(path) = " + Files.isDirectory(path));
// 属性を纏めて取得
System.out.println("Files.readAttributes(path, \"*\") = " + Files.readAttributes(path, "*"));