Dotazový datový zdroj SQL (dříve: SQL dotazový datový zdroj)

Datová třída

com.etnetera.jnp.data.SqlDataSourceData

Rozšiřuje

AbstractDataSourceData

Obsahové varianty

  • default (default)

Atributy

(Kromě atributů dále uvedených také může dědit od typu AbstractDataSourceData. Viz úvodní poznámky k tomuto přehledu.)

Systémový názevTyp hodnotyVícejazyčnýMultihodnota
connectionKey
connectionKeyEnumerationnene
query
queryStringnene

Poznámky k jednotlivým atributům

Databázové připojení

Možné hodnoty závisejí na konfiguraci dané instalace systému jNetPublish. V principu je tedy možné vypisovat v jedné prezentaci data z libovolného množství různých databází.

Přidání databázového připojení do jNP zajistí maintainer (nebo obecně vývojář) ve spolupráci s administrátorem.

  1. Administrátor zajistí prostup do databáze a nastaví aplikační kontext.

  2. V jnp.xml, v části definující suppliery, přidá vývojář do database-connections vlastní provider, jehož datasource odpovídá konfiguraci z aplikačního kontextu nastavené administrátorem.

    Ve verzi Vetis v konfiguraci pro loom jde o fragment
    <!-- #fragment database-connections.provider … -->

TFS v SQL dotazech

Hodnotu atributu SQL dotaz lze parametrizovat pomocí TFS.

Výraz reprezentující v TFS hodnotu, která se má použít jako hodnota v SQL, se běžným způsobem vloží ve složených závorkách; nepoužívá se žádný modifikátor.

Zápis se převede na parametr SQL dotazu (viz ParametrizedStatement z JDBC); je proto nutné ho uvádět bez obalujících uvozovek/apostrofů, i kdyby jeho hodnota byla řetězec přebíraný z parametru HTTP požadavku.

Příklad: Parametrizovaná hodnota v SQL

Má-li se získat z tabulky product_detail řádek s primárním klíčem, který je předáván jako parametr požadavku, může zápis vypadat takto:

select * from product_detail
where id={_request.params.detailId}

V případě, že je potřeba, aby se řetězcová reprezentace nějaké hodnoty TFS vložila do dotazu jako jiná syntaktická součást dotazu, a tedy přesně tak, jak se vyhodnotí v TFS, použije se modifikátor SQL.

Použití modifikátoru SQL může velmi pravděpodobně činit aplikaci zranitelnou vůči útokům typu SQL injection. Je na zodpovědnosti toho, kdo tento konstrukt použil, aby ošetřil možné vstupní hodnoty.

Příklad: Parametrizovaný název tabulky v SQL

Pokud v databázi existují tabulky product_detail_cz a product_detail_en a jNetPublish pracuje s češtinou a angličtinou, může zápis dotazu vypadat takto.

select * from product_detail_{_language SQL}
where id={_request.params.detailId}

Speciálně uvedená konstrukce je relativně bezpečná, protože proměnná _language může nabývat jen několika hodnot definovaných v aplikaci.

Pro vložení příspěvku do diskuse se přihlašte.