Play Frameworkでデータベースエンジンを判別する方法

PostgreSQLとMySQLでランダムにデータを取り出すとき、

MySQLだと

ORDER BY rand()

PostgreSQLだと

ORDER BY RANDOM() 

になりますが、これをPlay FrameworkのEBeanでデータベースエンジンを判別して振り分ける方法です。

    public static String getDatabase() {
        try {
            DataSource dataSource = DB.getDataSource();
            Connection connection2 = dataSource.getConnection();
            DatabaseMetaData metaData = connection2.getMetaData();
            return metaData.getDatabaseProductName();
        } catch (SQLException e) {
            Logger.error("getDatabase", e);
        }
        return "";
    }

この方法でデータベースエンジンを取得することができます。

なおメタデータではデータベースエンジンのバージョン情報なども取得可能なようです。

MySQLかどうか、PostgreSQL可動化を判別するには以下のようにします。

    public static boolean isMySQL() {
        return "mysql".equalsIgnoreCase(getDatabase()) ? true : false;
    }

    public static boolean isPostgreSQL() {
        return "postgresql".equalsIgnoreCase(getDatabase()) ? true : false;
    }

データベースエンジンごとにランダムを返すには

    public static String getRandom() {
        if (isMySQL()) {
            return "RAND()";
        } else if (isPostgreSQL()) {
            return "RANDOM()";
        }
        return "";
    }