src/org/nutz/dao/jdbc/Jdbcs.java
public static JdbcExpert getExpert(String productName, String version) {
        String dbName = String.format("%s::NUTZ_JDBC::%s", productName, version).toLowerCase();

        JdbcExpert re = conf.matchExpert(dbName);

        if (null == re) {
        	log.warnf("unknow database type '%s %s', fallback to MySql 5", productName, version);
        	re = conf.matchExpert("mysql 5");
        }

        return re;
    }
public static JdbcExpert getExpert(String productName, String version) {
        String dbName = String.format("%s::NUTZ_JDBC::%s", productName, version).toLowerCase();

        JdbcExpert re = conf.matchExpert(dbName);

        if (null == re) {
        	log.warnf("unknow database type '%s %s', fallback to MySql 5", productName, version);
        	re = conf.matchExpert("mysql 5");
        }

        return re;
    }
根据数据库的产品名称，获取其专属的 Expert
<p>
映射的规则存放在 JSON 文件 "nutz_jdbc_experts.js" 中，你可以通过建立这个文件修改 Nutz 的默认映射规则
<p>
比如下面的文件，将支持两种数据库

<pre>
{
experts : {
"postgresql.*" : "org.nutz.dao.impl.jdbc.psql.PostgresqlExpert",
"mysql.*" :  "org.nutz.dao.impl.jdbc.mysql.MysqlExpert"
},
config : {
"temp-home" : "~/.nutz/tmp/dao/",
"temp-max" : 2000
}
}
</pre>

本函数传入的两个参数将会被:

<pre>
String.format(&quot;%s::NUTZ_JDBC::%s&quot;, productName, version);
</pre>

并被你声明的正则表达式(expert 段下的键值)依次匹配，如果匹配上了，就会用相应的类当作驱动封装类

@param productName
数据库产品名称
@param version
数据库版本号

@return 该数据库的特殊驱动封装类

@see java.sql.Connection#getMetaData()
@see java.sql.DatabaseMetaData#getDatabaseProductName()