Bootstrap

OceanBase 驱动类获取数据库精确类型 “Oracle|MySQL”

当我们需要获取 DataSource 对象所连接的数据库的数据库名称时,正常是通过如下代码来获取:

String databaseName = dataSource.getConnection().getMetaData().getDatabaseProductName();

我们知道 OceanBase 数据库企业版的租户是区分 Oracle 和 MySQL 两种模式的,使用以上代码获取的数据库类型,在驱动包 oceanbase-client-2.4.9.jar 版本开始,驱动包中不再返回 OracleMySQL,默认返回 OceanBase

下面是 2.4.82.4.9 两个版本的源代码:

// 2.4.9 版本
public String getDatabaseProductName() throws SQLException {
	if(connection.getProtocol().getOptions().useCompatibleMetadata) {
		if(protocol.isOracleMode()) {
			return "Oracle";
		}
		return "MySQL";
	}
	return "OceanBase";
}

// 2.4.8 版本
public String getDatabaseProductName() throws SQLException {
	if(connection.getProtocol().isOracleMode()) {
		return "Oracle";
	} else {
		return "MySQL";
	}
}

所以,可以得出结论,就是驱动包自 2.4.9 开始,如果想获取精确的 Oracle 或 MySQL 模式,需要在 jdbc 连接的 Url 中添加参数 useCompatibleMetadata=true 来达到目的,因为这个默认值是 false。


(END)

;