docs: @SuppressWarnings("unchecked")
      public <N> List<N> findOneColumn(String sql, List<?> params, final int mapperColumnIndex,
                                       final Class<N> resultClass) {
  
          if (sql == null) {
              recordLog(" param sql is null!");
          }
  
          if (Number.class.isAssignableFrom(resultClass)) {
              if (resultClass.equals(Long.class)) {
                  return findBySQL(sql, params, new RowMapper<N>() {
                      public N mapRow(ResultSet rs, int count) throws SQLException {
                          Number n = (Number) (rs.getObject(mapperColumnIndex));
                          if (n == null) {
                              return null;
                          }
                          return (N) Long.valueOf(n.longValue());
                      }
                  });
              } else if (resultClass.equals(Integer.class)) {
                  return findBySQL(sql, params, new RowMapper<N>() {
                      public N mapRow(ResultSet rs, int count) throws SQLException {
                          Number n = (Number) (rs.getObject(mapperColumnIndex));
                          if (n == null) {
                              return null;
                          }
                          return (N) Integer.valueOf(n.intValue());
                      }
                  });
              } else if (resultClass.equals(Float.class)) {
                  return findBySQL(sql, params, new RowMapper<N>() {
                      public N mapRow(ResultSet rs, int count) throws SQLException {
                          Number n = (Number) (rs.getObject(mapperColumnIndex));
                          if (n == null) {
                              return null;
                          }
                          return (N) Float.valueOf(n.floatValue());
                      }
                  });
              } else if (resultClass.equals(Double.class)) {
                  return findBySQL(sql, params, new RowMapper<N>() {
                      public N mapRow(ResultSet rs, int count) throws SQLException {
                          Number n = (Number) (rs.getObject(mapperColumnIndex));
                          if (n == null) {
                              return null;
                          }
                          return (N) Double.valueOf(n.doubleValue());
                      }
                  });
              } else if (resultClass.equals(Short.class)) {
                  return findBySQL(sql, params, new RowMapper<N>() {
                      public N mapRow(ResultSet rs, int count) throws SQLException {
                          Number n = (Number) (rs.getObject(mapperColumnIndex));
                          if (n == null) {
                              return null;
                          }
                          return (N) Short.valueOf(n.shortValue());
                      }
                  });
              } else if (resultClass.equals(Byte.class)) {
                  return findBySQL(sql, params, new RowMapper<N>() {
                      public N mapRow(ResultSet rs, int count) throws SQLException {
                          Number n = (Number) (rs.getObject(mapperColumnIndex));
                          if (n == null) {
                              return null;
                          }
                          return (N) Byte.valueOf(n.byteValue());
                      }
                  });
              } else {
                  return findBySQL(sql, params, new RowMapper<N>() {
                      public N mapRow(ResultSet rs, int count) throws SQLException {
                          Number n = (Number) (rs.getObject(mapperColumnIndex));
                          return (N) n;
                      }
                  });
              }
          } else if (resultClass.equals(String.class)) {
              return findBySQL(sql, params, new RowMapper<N>() {
                  public N mapRow(ResultSet rs, int count) throws SQLException {
                      return (N) (rs.getString(mapperColumnIndex));
                  }
              });
          } else if (resultClass.equals(Date.class)) {
              return findBySQL(sql, params, new RowMapper<N>() {
                  public N mapRow(ResultSet rs, int count) throws SQLException {
                      return (N) (rs.getDate(mapperColumnIndex));
                  }
              });
          } else {
              throw new RuntimeException("not supported type");
          }
      }