如何确定给定 JDBC 连接的数据库类型?

2022-09-01 07:34:02

我需要处理返回三个数据库(Oracle,sybase,MS-Server)的存储过程/函数的结果集。过程/函数通常是相同的,但在Oracle中调用略有不同。

statement.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR);
...
statement.execute(); 
ResultSet rs = (ResultSet)statement.getObject(1);

JDBC 没有提供一种通用的方法来处理这个问题,所以我需要在代码中区分不同类型的数据库。我得到了连接,但不知道确定DB是否是预言机的最佳方法。我可以使用驱动程序名称,但宁愿找到一种更干净的方式。


答案 1

我怀疑你会想要使用 DatabaseMetaData 类。最有可能的是,DatabaseMetaData.getDatabaseProductName 就足够了,但是如果您的代码依赖于您正在使用的特定数据库的特定版本,您可能还需要使用 getDatabaseProductVersion 方法。


答案 2

您可以使用 org.apache.ddlutils, class Platformutils

databaseName = new PlatformUtils().determineDatabaseType(dataSource)

推荐