如何通过 JDBC 连接了解 DB2 风格

Posted

技术标签:

【中文标题】如何通过 JDBC 连接了解 DB2 风格【英文标题】:How to know DB2 flavour by JDBC connection 【发布时间】: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 在例程中访问。 【参考方案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);
        
    

【讨论】:

感谢您的回答,但它不符合我的要求。产品名称由用户提供,在这种情况下如何识别。

以上是关于如何通过 JDBC 连接了解 DB2 风格的主要内容,如果未能解决你的问题,请参考以下文章

与 db2 jdbc 的连接错误

如何通过 Jmeter 中的系统变量设置 jdbc 连接配置

如何通过 JDBC 从 Db2 匿名块返回动态结果集?

DB2数据库连接问题

与 DB2 的 JDBC 连接?

带有实例名称的 DB2 JDBC 连接 url