public List<T> executeQuery(String sql, Class<?> clazz) throws Exception{
        Connection conn = null;
        PreparedStatement stmt = null;
        ResultSet rs = null;
        try{
            sql = sql.trim();
            if(null == sql || !sql.toLowerCase().contains("select")){
                throw new Exception("paramter sql is not a SELECT statement!");
            }
            conn = C3p0DbHelper.getConnection();
            stmt = conn.prepareStatement(sql);
            rs = stmt.executeQuery();
            logger.log(Level.INFO, "[executeQuery]sql ==> " + sql);
            List<T> list = null;
            final ResultSet rr = rs;
            while(rs.next()){
                @SuppressWarnings("unchecked")
                final T obj = (T)clazz.newInstance();

                ReflectionUtils.doWithFields(clazz, new ReflectionUtils.FieldCallback(){

                    public void doWith(Field field) throws Exception
                    {
                        String columnValue = getColumnValue(field);
                        if(null == columnValue){ // 如果该属性没有加column注解
                            return;
                        }
                        field.setAccessible(true);
                        field.set(obj, rr.getObject(columnValue));
                    }

                });
                if(null == list){
                    list = new ArrayList<T>();
                }
                list.add(obj);

            }
            logger.log(Level.INFO, "[executeQuery]result: ", list);
            return list;
        }catch(Exception ex){
            throw ex;
        }finally{
            C3p0DbHelper.closeJDBC(rs, stmt, conn);
        }
        
    }