code: @SuppressWarnings("unchecked")
      @SafeVarargs
      public final <V> Nullable<V> queryForSingleResult(final Class<V> targetClass, final String sql, Object... parameters) {
          N.checkArgNotNull(targetClass, "targetClass");
  
          final Cursor cursor = rawQuery(sql, parameters);
          DataSet ds = null;
  
          try {
              ds = extractData(cursor, Type.arrayOf(targetClass), 0, 1);
          } finally {
              cursor.close();
          }
  
          return N.isNullOrEmpty(ds) ? Nullable.<V> empty() : Nullable.of(N.convert(ds.get(0, 0), targetClass));
      }
docs: Returns a {@code Nullable} describing the value in the first row/column if it exists, otherwise return an empty {@code Nullable}.
  
  Special note for type conversion for {@code boolean} or {@code Boolean} type: {@code true} is returned if the
  {@code String} value of the target column is {@code "true"}, case insensitive. or it's an integer with value > 0.
  Otherwise, {@code false} is returned.
  
  Remember to add {@code limit} condition if big result will be returned by the query.
  
  @param targetClass set result type to avoid the NullPointerException if result is null and T is primitive type
  "int, long. short ... char, boolean..".
  @param sql set <code>offset</code> and <code>limit</code> in sql with format:
  <li><code>SELECT * FROM account where id = ? LIMIT <i>offsetValue</i>, <i>limitValue</i></code></li>
  <br>or limit only:</br>
  <li><code>SELECT * FROM account where id = ? LIMIT <i>limitValue</i></code></li>
  @param parameters A Object Array/List, and Map/Entity with getter/setter methods for parameterized sql with named parameters