Dotazový datový zdroj SQL (dříve: SQL dotazový datový zdroj)
Datová třída
com.etnetera.jnp.data.SqlDataSourceData
Rozšiřuje
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ázev | Typ hodnoty | Vícejazyčný | Multihodnota |
---|---|---|---|
connectionKey | |||
connectionKey | Enumeration | ne | ne |
query | |||
query | String | ne | ne |
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.
Administrátor zajistí prostup do databáze a nastaví aplikační kontext.
-
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.