如何通过代码去识别数据库是oceanbase

 private static final String MYSQL_JDBC_URL_PREFIX = "jdbc:mysql";
    private static final String ORACLE_JDBC_URL_PREFIX = "jdbc:oracle";
    private static final String H2_JDBC_URL_PREFIX = "jdbc:h2";
    private static final String POSTGRESQL_JDBC_URL_PREFIX = "jdbc:postgresql";
    private static final String MARIADB_JDBC_URL_PREFIX = "jdbc:mariadb";
    private static final String MSSQL_JTDS_URL_PREFIX = "jdbc:jtds:sqlserver:";
    private static final String MSSQL_JDBC_URL_PREFIX = "jdbc:sqlserver:";
    private static final String KYLIN_JDBC_URK_PREFIX = "jdbc:kylin";
    private static final String IMPALA_JDBC_URK_PREFIX = "jdbc:impala";
    private static final String CLICKHOUSE_JDBC_URK_PREFIX = "jdbc:clickhouse";

    public static ConnectionInfo parser(String url) {
        ConnectionURLParser parser = null;
        // jdbc url 
        String lowerCaseUrl = url.toLowerCase();
        if (lowerCaseUrl.startsWith(MYSQL_JDBC_URL_PREFIX)) {
            parser = new MysqlURLParser(url);
        } else if (lowerCaseUrl.startsWith(ORACLE_JDBC_URL_PREFIX)) {
            parser = new OracleURLParser(url);
        } else if (lowerCaseUrl.startsWith(H2_JDBC_URL_PREFIX)) {
            parser = new H2URLParser(url);
        } else if (lowerCaseUrl.startsWith(POSTGRESQL_JDBC_URL_PREFIX)) {
            parser = new PostgreSQLURLParser(url);
        } else if (lowerCaseUrl.startsWith(MARIADB_JDBC_URL_PREFIX)) {
            parser = new MariadbURLParser(url);
        } else if (lowerCaseUrl.startsWith(MSSQL_JTDS_URL_PREFIX)) {
            parser = new MssqlJtdsURLParser(url);
        } else if (lowerCaseUrl.startsWith(MSSQL_JDBC_URL_PREFIX)) {
            parser = new MssqlJdbcURLParser(url);
        } else if (lowerCaseUrl.startsWith(KYLIN_JDBC_URK_PREFIX)) {
            parser = new KylinJdbcURLParser(url);
        } else if (lowerCaseUrl.startsWith(IMPALA_JDBC_URK_PREFIX)) {
            parser = new ImpalaJdbcURLParser(url);
        } else if (lowerCaseUrl.startsWith(CLICKHOUSE_JDBC_URK_PREFIX)) {
            parser = new ClickHouseURLParser(url);
        }
        return parser.parse();
    }

我目前是通过这种去识别数据库引擎的方式判断,但是mysql driver 能够连接上oceanbase。
想问下社区的各位老师有没有其他好的方法

1 个赞
  1. 请问一下你这边需要识别出是OceanBase之后,后续需要做什么特殊判断吗?正常来说,应用直接当MySQL使用就行;
  2. 如果你觉得确实有必要识别是否是OceanBase,可以通过发SQL命令来完成,例如通过selec version() 来判断是否是OceanBase
obclient [oceanbase]> select version();
+------------------------------+
| version()                    |
+------------------------------+
| 5.7.25-OceanBase_CE-v4.2.1.1 |
+------------------------------+
1 row in set (0.001 sec)
1 个赞

后续没有其他判断,目前想法是直接打上标签,大家好像都是推荐执行sql来判断 :joy:

2 个赞

user带有账号@租户#集群 也可以用来做一个简单的判断。