【问题标题】:How to know DB2 flavour by JDBC connection如何通过 JDBC 连接了解 DB2 风格
【发布时间】:2018-01-27 12:54:52
【问题描述】:

我有DB2的JDBC连接,如何识别是Z/OS390还是AS400还是UDB连接。

是否有任何模式可以说明 DB2 的类型?

【问题讨论】:

  • 目前,我不认为有一个众所周知的 SQL 用于此。 IBM 应该真正解决这个问题。每个平台都有自己独特的非便携式方法来确定版本/实例级信息。您可能会使用启发式方法。 Db2 for Z 可能有一个 sysibm.locations 表(在其他两个平台中不存在)。 i 系列将具有 QSYS2.TABLES(在其他两个平台中不存在)。 LUW 将有 TABLE (sysproc.env_get_inst_info())
  • 对于 ZOS,除了 sysibm.locations 表之外,还有其他方法可以找到吗?对于 UDB,我使用的是“SELECT TABNAME FROM SYSCAT.TABLES WHERE 1>9”,这是正确的吗?
  • 如果您乐于使用 java 方法(与仅 SQL 不同),那么 mustaccio 的答案就足够了,因为返回的产品名称由 Db2 设置为 SQL* 之一(对于 Linux/Unix /Windows),DSN* 用于 Z/OS,QSQ* 用于 i 系列,ARI* 用于 vse/vm。这似乎回答了你的问题。对于非 Java 语言,此信息也在类型 1 连接的 SQLCA.SQLERRP 中,也可通过 GET DIAGNOSTICS....DB2_PRODUCT_ID 在例程中访问。

标签: jdbc db2


【解决方案1】:

您可以使用DatabaseMetaData.getDatabaseProductName()DatabaseMetaData.getDatabaseProductVersion()。例如,在 Linux for Db2 10.5 修订包 7 上,它们分别返回 DB2/LINUXX8664SQL10057

示例代码:

import java.sql.*;

class Test {
    public static void main(String args[]) {
        if (args.length == 0 ) {
            System.out.println("need url");
            System.exit(1);
        }

        String url = args[0];

        try {
            Class.forName("com.ibm.db2.jcc.DB2Driver");
            Connection c = DriverManager.getConnection(url);
            if (c != null) {
                DatabaseMetaData meta = c.getMetaData();
                if (meta != null) {
                    System.out.println( String.format(
                        "Connected to %s %s (%d.%d)",
                        meta.getDatabaseProductName(),
                        meta.getDatabaseProductVersion(),
                        meta.getDatabaseMajorVersion(),
                        meta.getDatabaseMinorVersion()
                        )
                    );
                }
                else {
                    System.out.println("Metadata is null");
                }
            }
            c.close();
        }
        catch (Exception e) {
            System.out.println(e.getMessage());
            e.printStackTrace();
            System.exit(1);
        }
    }
}

【讨论】:

  • 感谢您的回答,但它不符合我的要求。产品名称由用户提供,在这种情况下如何识别。
猜你喜欢
  • 2014-10-23
  • 2014-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-23
  • 2016-06-24
相关资源
最近更新 更多