タイガー!タイガー!じれったいぞー!(SE編)

AS400,WAS,GlassFish,Java,JavaEE,JSF等の開発における日々の気づきをまとめたブログ(備忘録)。

【DB2/400】DB側のシステム日付を取得する

DB2/400」という呼び方が、古いものかもしれません。今なら、「DB2 for i」なのでしょう。

DB2 for iをAP Server等のリモートで操作する場合、DB側のシステム時間を使う必要があったので、サンプルを書いてみました。

参考にさせていただいたサイトは、こちらです!

特殊なメモリー内テーブルである「sysibm.sysdummy1」にアクセスし、特殊レジスター値(データベース・マネージャーによってアプリケーション・プロセスに対して定義されるストレージ域)を取得します。

サンプル・プログラム

package test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class CurrentDateTest {
    static Connection conn = null;

    // JDBC(DB2 for i)
    final static String DB_AS_DRIVER = "com.ibm.as400.access.AS400JDBCDriver";
    final static String DB_AS_CONNECTION = "jdbc:as400://192.168.1.2";
    final static String DB_AS_USER = "QUSER";
    final static String DB_AS_PASSWORD = "********";

    public static void main(final String[] args) throws Exception {

        try {
            // JDBCドライバのロード
            Class.forName(DB_AS_DRIVER);
            conn = DriverManager.getConnection(DB_AS_CONNECTION, DB_AS_USER,
                    DB_AS_PASSWORD);

            String sql = "SELECT current date, current time, current timestamp "
                    + "FROM sysibm.sysdummy1";
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery(sql);
            while (rs.next()) {
                System.out.println(rs.getDate(1));
                System.out.println(rs.getTime(2));
                System.out.println(rs.getTimestamp(3));
            }
            rs.close();
            stmt.close();

        } catch (SQLException e) {
            e.printStackTrace();

        } finally {
            conn.close();
        }
    }
}

実行結果

2015-01-27
21:50:57
2015-01-27 21:50:57.390661

これは、すばらしい!
SQL経験が浅い私には、目から鱗ですよ!! RDBS万歳!!!