public static JdbcExpert getExpert(DataSource ds) {
        log.info("Get Connection from DataSource for JdbcExpert, if you lock at here, check your database server and configure");
        Connection conn = null;
        try {
            conn = Trans.getConnectionAuto(ds);
            DatabaseMetaData meta = conn.getMetaData();
            String pnm = meta.getDatabaseProductName();
            String ver = meta.getDatabaseProductVersion();
            return getExpert(pnm, ver);
        }
        catch (Throwable e) {
            throw Lang.wrapThrow(e);
        }
        finally {
            Trans.closeConnectionAuto(conn);
        }
    }
public static JdbcExpert getExpert(DataSource ds) {
        log.info("Get Connection from DataSource for JdbcExpert, if you lock at here, check your database server and configure");
        Connection conn = null;
        try {
            conn = Trans.getConnectionAuto(ds);
            DatabaseMetaData meta = conn.getMetaData();
            String pnm = meta.getDatabaseProductName();
            String ver = meta.getDatabaseProductVersion();
            return getExpert(pnm, ver);
        }
        catch (Throwable e) {
            throw Lang.wrapThrow(e);
        }
        finally {
            Trans.closeConnectionAuto(conn);
        }
    }
public static JdbcExpert getExpert ( DataSource ds ) { log . info ( "Get Connection from DataSource for JdbcExpert, if you lock at here, check your database server and configure" ) ; Connection conn = null ; try { conn = Trans . getConnectionAuto ( ds ) ; DatabaseMetaData meta = conn . getMetaData ( ) ; String pnm = meta . getDatabaseProductName ( ) ; String ver = meta . getDatabaseProductVersion ( ) ; return getExpert ( pnm , ver ) ; } catch ( Throwable e ) { throw Lang . wrapThrow ( e ) ; } finally { Trans . closeConnectionAuto ( conn ) ; } }
针对一个数据源，返回其专属的 JdbcExpert

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

@see org.nutz.dao.jdbc.Jdbcs#getExpert(String, String)
针对一个数据源，返回其专属的 JdbcExpert