如何确定给定 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 连接的数据库类型?的主要内容,如果未能解决你的问题,请参考以下文章