IBM here介绍了如何使用JDBC了解您连接到的Db2服务器的类型。您可以从 *Db2 from z/OS指南 * 中看到它,但在其他地方没有找到它。 假设您已经使用Connection.getMetaData()撷取了DatabaseMetaData对象,则可以执行下列动作:
String databaseProductName = databaseMetaData.getDatabaseProductName();
String databaseProductVersion = databaseMetaData.getDatabaseProductVersion();
String databaseProductNameLower = databaseProductName.toLowerCase(Locale.US);
// Detect IBM Db2 flavors
// According to IBM's documentation the database engine must be detected
// primarily from the ProductVersion value whereas IBM makes no real
// promise on the value of the ProductName. This is why we use the ProductName
// with some caution below.
if (databaseProductNameLower.equals("db2")
|| databaseProductNameLower.matches("db2[.-/ ].*")) {
if (databaseProductVersion != null && databaseProductVersion.length() > 3) {
String ppp = databaseProductVersion.substring(0, 3);
switch (ppp) {
case "DSN":
return DB2_ZOS; // Db2 for z/OS
case "SQL":
return DB2_LUW; // Db2 on Linux, UNIX, and Windows systems
case "QSQ":
return DB2_I; // Db2 for IBM i
case "ARI":
return DB2_VM; // Db2 Server for VM and VSE
default:
}
}
}
2条答案
按热度按时间z9smfwbn1#
您可以使用
DatabaseMetaData.getDatabaseProductName()
和DatabaseMetaData.getDatabaseProductVersion()
。例如,在Linux的Db2 10.5修复包7中,它们分别返回DB2/LINUXX8664
和SQL10057
。样本代码:
disbfnqx2#
IBM here介绍了如何使用JDBC了解您连接到的Db2服务器的类型。您可以从 *Db2 from z/OS指南 * 中看到它,但在其他地方没有找到它。
假设您已经使用Connection.getMetaData()撷取了DatabaseMetaData对象,则可以执行下列动作:
(In我的例子我使用上面的作为更大的东西的一部分,所以不从上面返回一个值是可以接受的。