2012年11月4日日曜日

CoffeeScriptで値の比較

JavaScriptで値の変換をするときは、型まで完全に一致していることを保証するために「===」や「!==」を使用します。
CoffeeScriptでは、JavaScriptで推奨されない(暗黙の型変換が行われるため)「==」と「!=」が、型まで完全に一致していることをチェックしてくれます。また、「==」と「!=」のエイリアスとして「is」と「isnt」があるので英文のように比較を行うこともできます。

サンプル

console.log(0 == 0) # true
console.log(0 is 0) # true

console.log(0 != 0)   # false
console.log(0 isnt 0) # false

userName = 'hoge fuga'
console.log(userName == 0) # false
console.log(userName is 0) # false
console.log(userName is 'hoge fuga') # true
console.log(userName is 'user name') # false
このコードがJavaScriptに変換されると、したのコードになります。
JavaScriptのコードは、「===」と「!==」になっています。
(function() {
  var userName;

  console.log(0 === 0);

  console.log(0 === 0);

  console.log(0 !== 0);

  console.log(0 !== 0);

  userName = 'hoge fuga';

  console.log(userName === 0);

  console.log(userName === 0);

  console.log(userName === 'hoge fuga');

  console.log(userName === 'user name');

}).call(this);

PL/SQLで開いたカーソルをJDBC経由でJavaに返す方法

PL/SQLで開いたカーソルをJDBC経由で受け取り、Java側で処理する方法。

OracleDataSource dataSource = new OracleDataSource();
dataSource.setURL("jdbc:oracle:thin:@localhost:1521:xe");
dataSource.setUser("hoge");
dataSource.setPassword("fuga");

try (Connection connection = dataSource.getConnection()) {
    // PL/SQLの定義。ref_curというref_cursorを開き、アウトパラメータ(? := ref_curの部分)に代入している。
    CallableStatement statement = connection.prepareCall(
            "declare "
                    + " ref_cur sys_refcursor;"
                    + " begin "
                    + " open ref_cur"
                    + " for ' select table_name from user_tables'; "
                    + " ? := ref_cur;"
                    + " end;"
    );

    // アウトパラメータの方をcursorと定義する
    statement.registerOutParameter(1, OracleTypes.CURSOR);
    statement.execute();

    // アウトパラメータをResultSetとして取得し、処理してあげる
    try (ResultSet resultSet = (ResultSet) statement.getObject(1)) {
        while (resultSet.next()) {
            System.out.println("resultSet.getString(\"table_name\") = " + resultSet.getString("table_name"));
        }
    }
}