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-connectionsvlastní provider, jehoždatasourceodpoví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.