各数据库字符串相加语法完全不同,mysql用concat函数,oracle用||操作符号,sqlserver用+操作,平台希望用一套代码兼容所有数据库。平台设计的机制如下:
QLMContants类定义了平台级别参数:
public static String DatabaseType; //数据类型
平台启动时,会调用判断数据类型函数:
public static String judgeDatabaseType(String url) { if (!StringUtils.hasText(url)) return DBConstants.UNKNOWN; String lowurl=url.toLowerCase(); if (lowurl.startsWith("jdbc:oracle:")) { return DBConstants.ORACLE; } else if (lowurl.startsWith("jdbc:mysql:")) { return DBConstants.MYSQL; } else if (lowurl.startsWith("jdbc:postgresql:")) { return DBConstants.POSTGRESQL; } else if (lowurl.startsWith("jdbc:sqlserver:")) { return DBConstants.SQLSERVER; } else if (lowurl.startsWith("jdbc:db2:")) { return DBConstants.DB2; } else { return DBConstants.UNKNOWN; } }
会根据数据库链接判断出数据库类型。这样在具体业务里可以按如下方式处理数据库的不同:
if (MYSQL.equals(QLMContants.DatabaseType)) { // 使用concat } else if (ORACLE.equals(QLMContants.DatabaseType)){ // 使用|| }