【问题标题】:How to determine database type for a given JDBC connection?如何确定给定 JDBC 连接的数据库类型?
【发布时间】: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 的最佳方法。我可以使用驱动程序名称,但宁愿找到更简洁的方法。

【问题讨论】:

    标签: java oracle jdbc


    【解决方案1】:

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

    【讨论】:

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

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

    databaseName = new PlatformUtils().determineDatabaseType(dataSource)
    

    【讨论】:

      猜你喜欢
      • 2014-02-27
      • 2011-08-28
      • 2020-09-28
      • 2018-04-27
      • 1970-01-01
      • 2012-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多