class JdbcWrapper extends TraceObject implements Wrapper {

    @Override
    @SuppressWarnings("unchecked")
    public <T> T unwrap(Class<T> iface) throws SQLException {<FILL_FUNCTION_BODY>}

    @Override
    public boolean isWrapperFor(Class<?> iface) throws SQLException {
        return iface != null && iface.isAssignableFrom(getClass());
    }

    @Override
    public SQLException logAndConvert(Exception ex) { // 只是把protected变成public，允许在其他代码中调用
        return super.logAndConvert(ex);
    }

    public static void setAsyncResult(AsyncCallback<?> ac, Throwable cause) {
        // 转换成SQLException
        ac.setAsyncResult(DbException.toSQLException(cause));
    }
}

        try {
            if (isWrapperFor(iface)) {
                return (T) this;
            }
            throw DbException.getInvalidValueException("iface", iface);
        } catch (Exception e) {
            throw logAndConvert(e);
        }
    
<methods>public non-sealed void <init>() ,public static int getNextTraceId(com.lealone.common.trace.TraceObjectType) ,public int getTraceId() ,public java.lang.String getTraceObjectName() <variables>private static final non-sealed java.util.concurrent.atomic.AtomicInteger[] ID,protected com.lealone.common.trace.Trace trace