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

Posted

技术标签:

【中文标题】如何确定给定 JDBC 连接的数据库类型?【英文标题】:How to determine database type for a given JDBC connection? 【发布时间】:2010-09-20 05:34:54 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

Microsoft SQL Server 为产品名称提供“Microsoft SQL Server”。 PostgreSQL 给出“PostgreSQL” mysql 给出“MySQL”,HSQLDB 给出“HSQL 数据库引擎”。 Derby 提供“Apache Derby” 这个答案中列出了大多数其他值:***.com/questions/9320200/…【参考方案2】:

可以使用org.apache.ddlutils,类Platformutils:

databaseName = new PlatformUtils().determineDatabaseType(dataSource)

【讨论】:

以上是关于如何确定给定 JDBC 连接的数据库类型?的主要内容,如果未能解决你的问题,请参考以下文章

kettle如何添加新的数据库连接类型

简单的JSP访问数据库

java通过各种类型驱动连接数据库

如何使用JDBC连接TDengine数据库?

JDBC连接数据库

jdbc连接数据库的代码问题jdbc连接mysql数据库